Django Channels Websocket连接无法工作。

3

我正在尝试在服务器上运行django channels-examples中的multichat项目。在Windows机器上本地运行良好,但当我将其放到Linux服务器上并使用runserver启动时,它无法正常工作:

./manage.py runserver

当我访问网站时,它会正确显示,但是一旦JS发送WebSocket请求,我总是得到这个响应:

[2016/08/02 14:35:48] HTTP GET /chat/stream/ 404 [0.04, 127.0.0.1:40186]
....(many lines of this)

因此,WebSocket请求被处理为HTTP请求。响应应该是这样的:
[2016/08/02 16:34:45] WebSocket CONNECT /chat/stream/ [127.0.0.1:60250]

我不知道出了什么问题。HTTP和WebSocket的路由似乎是在daphne/twisted/...深处完成的。

我的频道设置如下(如果有帮助的话):

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgi_redis.RedisChannelLayer",
        "CONFIG": {
            "hosts": [(redis_host, 62031)],
        },
        "ROUTING": "multichat.routing.channel_routing",
    },
}

Twisted版本为16.2.0。

非常感谢能提供任何帮助或提示要寻找的方向。


嗨,我遇到了同样的问题。你能帮忙吗? - sandeep
2个回答

1

你能发完整的日志吗?

尝试使用daphne运行服务器并运行worker。

daphne multichat.asgi:channel_layer --port 80 --bind 0.0.0.0 -v2 
python manage.py runworker -v2 

使用类似supervisor这样的工具可以更好地在失败时重新启动它们。

1

以下是一些问题/建议:

这个Linux服务器是用于开发还是生产?即,是否有HTTP服务器或只有纯DJANGO运行?(在前一种情况下,您不会使用“./manage runserver”开始。)

“然后当我调用网站时,它会正确显示...”

这是因为请求的端口号不同吗?40186与60250。

您收到了404错误,例如URL未找到。这可以是HTTP服务器或DJANGO的响应。


我正在使用runserver运行它,但是django-channels用自己的runserver命令覆盖了它(启动daphne和工作进程)。端口可能确实是问题所在 - 每个失败的请求都显示不同的端口 - 而且我无法访问这些端口。但我不知道这些端口号从哪里来。 - ger.s.brett
实际上,显示的端口号应该是无意义的:因为这个请求起作用:[2016/08/03 07:47:51] HTTP GET /static/css/style.css 200 [0.02, 127.0.0.1:53294] 问题似乎在于它将ws请求处理为http。 - ger.s.brett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接