竞彩篮球app

您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> 编程语言综合 >> 正文

Node.js和Socket.IO扩展Django的实时处理功能

作者:佚名    责任编辑:admin    更新时间:    2015-10-14 17:57:17

   这篇文章主要介绍了使用Node.js和Socket.IO扩展Django的实时处理功能,用异步处理实时功能是相当强大的,文中给出的例子是建立一个实时聊天室,需要的朋友可以参考下

  今天,我们的目标是使用Django,Redis,和Socket.IO建立一个实时的聊天室。虽然几乎所有的Web应用程序都可以建立一个聊天室的。这篇文章将以较高的水平告诉你如何将基于REST的应用程序转换成一个实时的Web应用程序的。?#19968;?#20351;用Django创建REST的部分,实际上自由地使用任?#25991;?#33298;服的语言/框架均可。接下来,让我们跳进代码,先列举我们所需要的部分。

  组成:

  Django 1.4+

  Redis 2.6.x (版本可选,但是建议使用)

  Redis-py 2.7.x (仅当你使用Redis时需要)

  Node.js v0.8.x

  Socket.IO v0.9.x

  Cookie v0.0.5

  数据库、sqlite、其他你觉得类似数据库形式的 均可

  你的使用的版本可能与我不同,?#20197;?#26102;未测试其他版本,全部使用当前最新稳定版本。如果你无法通过下面方法安装,我已经编译好Ubuntu的软件包。你可以从评论中得到其他操作系统版本情况。

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #https://docs.djangoproject.com/en/dev/topics/install/ sudo apt-get install python-pip sudo pip install django   #http://redis.io/download sudo apt-get install redis-server   #https://github.com/andymccurdy/redis-py sudo pip install redis   #https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager sudo apt-get install python-software-properties sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs   #https://github.com/LearnBoost/socket.io npm install socket.io   #https://github.com/shtylman/node-cookie npm install cookie

  让我们从Django Project开始

  ?

1 2 3 django-admin.py startproject realtime_tutorial && cd realtime_tutorial python manage.py startapp core mkdir nodejs

  执行完以上的代码,django project就配置好了,接下来要做的是在settings文件中设置数据库。先创建一个空白数据库。(这是一个settings file的例子。在我的app中添加了一个“core”然后配置templates和urls的路径。你可以随意更改settings中的配置信息,但是要与你的app相对应。

  Model

  models很简单,我们将要建一个包含user和text的表。如果你想让他更复杂一些,可以添加chatroom等信息。(为了简单起见,这里只写了两个)

  ?

1 2 3 4 5 6 from django.db import models from django.contrib.auth.models import User   class Comments(models.Model): user = models.ForeignKey(User) text = models.CharField(max_length=255)

  这就是我们将要使用的model,接下来执行下面的syncdb代码(第一行代码),创建数据库。然后创建几个user来测试。(第二行代码)

  ?

1 2 3 4 python manage.py syncdb python manage.py createsuperuser   Node Server With Socket.IO

  这一部分将要介绍实时信息的发送和获取。使用Node.js创建一个?#35272;礢ocket.IO的app server,使用Redis 来做这项苦差事。在nodejs字典中,创建一个叫做“chat.js”的文件,然后把它放在这里:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 var http = require('http'); var server = http.createServer().listen(4000); var io = require('socket.io').listen(server); var cookie_reader = require('cookie'); var querystring = require('querystring');   var redis = require('socket.io/node_modules/redis'); var sub = redis.createClient();     //订阅chat channel     sub.subscribe('chat');     //配置socket.io?#21019;?#20648;Django设置的cookie io.configure(function(){ io.set('authorization', function(data, accept){ if(data.headers.cookie){ data.cookie = cookie_reader.parse(data.headers.cookie); return accept(null, true); } return accept('error', false); }); io.set('log level', 1); });   io.sockets.on('connection', function (socket) {   //把信息从Redis发送到客户端 sub.on('message', function(channel, message){ socket.send(message); });   //客户端通过socket.io发送消息 socket.on('send_message', function (message) { values = querystring.stringify({ comment: message, sessionid: socket.handshake.cookie['sessionid'], });   var options = { host: 'localhost', port: 3000, path: '/node_api', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': values.length } };   //使用Django server发消息 var req = http.get(options, function(res){ res.setEncoding('utf8');   //输出错误信息 res.on('data', function(message){ if(message != 'Everything worked :)'){ console.log('Message: ' + message); } }); });   req.write(values); req.end(); }); });

  首先,我们导入并创建http server来监听localhost 4000端口。然后订阅Redis的 &quo

竞彩篮球app 二人斗地主下载 北京塞车人工一期计划 四肖三期·必出一期香港 pk10计划软件冠军五码 体探足球即时比分 动物狂欢怎么赢钱 百人牛牛押注技巧 用微信登录的炸金花 百人炸金花有规律吗 mg游戏官网