【问题标题】:django channels websocket connect not workingdjango 频道 websocket 连接不起作用
【发布时间】:2016-12-08 00:37:30
【问题描述】:

我正在尝试从服务器上的 django 频道示例运行多聊天项目。它可以在 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。

非常感谢任何有关查看方向的帮助或提示。

【问题讨论】:

  • 嗨,我也面临同样的问题。你能帮忙吗?

标签: django channels django-channels


【解决方案1】:

想到的一些问题/建议:

linux 服务器是用于开发还是生产? IE。是否有 HTTP 服务器或只是简单的 DJANGO 运行? (在前一种情况下,您不要以“./manage runserver”开头。)

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

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

你得到一个 404,例如网址未找到。这可以是来自 DJANGO 的 HTTP 服务器的响应。

【讨论】:

  • 我正在使用 runserver 运行它——但是 django-channels 用它自己的(启动 daphne 和工作人员)覆盖了 runserver 命令。端口可能确实是问题 - 每个失败的请求都显示一个不同的端口 - 以及我无法访问的那些端口。但我不知道这些端口号是从哪里来的。
  • 实际上显示的端口号应该是无意义的:因为此请求有效:[2016/08/03 07:47:51] HTTP GET /static/css/style.css 200 [0.02, 127.0. 0.1:53294] 问题似乎在于它将 ws 请求处理为 http
【解决方案2】:

你能发布完整的日志吗?

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

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

使用主管之类的东西以更好的方式执行此操作,以便在失败时重新启动它们。

【讨论】:

    猜你喜欢
    • 2019-01-27
    • 2021-08-21
    • 1970-01-01
    • 2019-05-31
    • 2020-07-17
    • 2023-02-25
    • 2022-12-11
    • 2023-01-19
    • 2019-04-25
    相关资源
    最近更新 更多