【问题标题】:Setting up Django Channels设置 Django 频道
【发布时间】:2018-08-01 05:42:09
【问题描述】:

我一直在尝试将 Django 频道集成到我现有的 Django 应用程序中。

这是我的 routing.py:

from channels.routing import route

channel_routing = [
    route('websocket.receive', 'chat.consumers.ws_echo', path=r'^/chat/$'),
]

这是我的 consumer.py:

def ws_echo(message):
    message.reply_channel.send({
        'text': message.content['text'],
    })

我正在尝试通过这样做来创建一个套接字:

ws = new WebSocket('ws://' +  window.location.host + '/chat/');

ws.onmessage = function(message) {
  alert(message.data);
};

ws.onopen = function() {
  ws.send('Hello, world');
};

当我运行此代码时,我在控制台中收到以下错误:

WebSocket connection to 'ws://localhost:8000/chat/' failed: Error during WebSocket handshake: Unexpected response code: 404

在我的服务器上,我收到以下错误:

HTTP GET /chat/ 404

基于错误,我认为 Django 提供的是 http 连接而不是 ws 连接。

非常感谢您对此问题的任何帮助。

【问题讨论】:

  • 您是否已经定义了 ws_connect?我认为您需要定义该函数并附加,接受以正确进行握手。 def ws_connect(message): message.reply_channel.send({"accept": True})
  • 我添加了它,但仍然遇到同样的问题。

标签: django django-channels


【解决方案1】:

我的设置问题在于我的 nginx 配置。我所要做的就是添加转发线路,它解决了问题。

location /chat { # Django Channels
            proxy_pass http://0.0.0.0:8001;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2021-07-10
    • 2018-11-20
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    相关资源
    最近更新 更多