gpt4 book ai didi

python - 使用 Django-websocket 时出错

转载 作者:太空狗 更新时间:2023-10-30 00:17:37 24 4
gpt4 key购买 nike

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

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

我在 Django 中的 View 函数如下:

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 部分。

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

谢谢

最佳答案

嗯,

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

可能在新的 Django 1.5.2 版本中有些东西应该被破坏。

我认为这是一个死项目,因此转向一个复杂但可行的解决方案,如 gevent 或 twisted。

感谢您的支持!!!

关于python - 使用 Django-websocket 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com