使用Django-websocket时出错

我正在开发一个使用Django的RESTful Web服务。 在某些情况下,我们需要将服务器对象推送到连接的客户端,而无需客户端轮询。 我们决定使用django-websocket 0.3.0。

我正在编写testing用例,并尝试使用nodejs ws客户端模块连接到服务器

我在Django中的视图function如下:

from django.http import HttpResponse from django_websocket import accept_websocket, require_websocket from django.views.decorators.csrf import csrf_exempt import json, sys, os, time, datetime @csrf_exempt @accept_websocket def home(request) : if not request.is_websocket(): return HttpResponse('new message') else: for message in request.websocket: message = modify_message(message) request.websocket.send(message) request.websocket.close() 

我在js中的客户端代码是这样的: –

 //Normal Get var request = require('request'); request('http://127.0.0.1:8000',function(err,resp,flag){ console.log(resp.body); }); //Opening a websocket var WebSocket = require('ws'); var ws = new WebSocket('ws://127.0.0.1:8000/', {origin: 'http://127.0.0.1:8000'}); ws.on('open', function() { console.log('connected'); ws.send(Date.now().toString(), {mask: true}); }); ws.on('close', function() { console.log('disconnected'); }); ws.on('message', function(data, flags) { console.log('Roundtrip time: ' + (Date.now() - parseInt(data)) + 'ms', flags); setTimeout(function() { ws.send(Date.now().toString(), {mask: true}); }, 500); }); 

第一个选项将消息作为“新消息”获取。另一方面,第二个调用将在客户端引发以下错误。 在服务器端,两个命令都通过200OK

 events.js:72 throw er; // Unhandled 'error' event ^ Error: unexpected server response (200) at ClientRequest.<anonymous> (../ws/lib/WebSocket.js:603:17) at ClientRequest.g (events.js:175:14) at ClientRequest.EventEmitter.emit (events.js:95:17) at HTTPParser.parserOnIncomingClient [as onIncoming] (http.js:1689:21) at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:120:23) at Socket.socketOnData [as ondata] (http.js:1584:20) at TCP.onread (net.js:525:27) 

在附注中,如果我在两个调用中都logging了request.is_websocket() ,它将在服务器端返回false,它永远不会进入else部分。

请帮我理解我在这里做了什么错误

谢谢

好,

我下载了他们的整个代码(不是pip安装)并运行提供的示例聊天程序。 同样的错误。 系统为任何ws://呼叫发送400响应码。 链接在pypi站点上的git hub项目页面返回一个404错误。 没办法,我可以提交一个错误报告。 通过电子邮件发送给开发者,并没有得到任何回应。

新的Django 1.5.2版本可能应该被打破。

我认为,这是一个死的项目,因此转移到一个复杂的,但工作的解决scheme,如gevent或扭曲。

感谢您的支持!!!