我正在使用 Django 开发一个 RESTFUL 网络服务。在某些情况下,我们需要将服务器对象推送到连接的客户端,而不需要客户端轮询。我们决定使用 django-websocket 0.3.0。
我正在编写测试用例并尝试使用 nodejs ws 客户端模块连接到服务器
我在 Django 中的视图函数如下:
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)
附带说明一下,如果我request.is_websocket()
在两个调用上都记录它,它会在服务器端返回错误的含义,它永远不会进入 else 部分。
请帮助我了解我在这里犯了什么错误
谢谢