Django 通道套接字未连接到消费者

Posted

技术标签:

【中文标题】Django 通道套接字未连接到消费者【英文标题】:Django channels socket not connecting to consumer 【发布时间】:2020-06-10 14:14:37 【问题描述】:

我是套接字编程的新手,我在这里遇到了一个问题。我的客户端没有连接到消费者。

JavaScript 代码

<script>
    // websocket scripts
    var socket = new WebSocket("ws://127.0.0.1:8000/test/")
</script>

路由

application = ProtocolTypeRouter(
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            [
                url(r'^ws/test', consumers.TestConsumer),
            ]
        )
    ),
)

错误

WebSocket connection to 'ws://127.0.0.1:8000/test/' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET

【问题讨论】:

【参考方案1】:

您应该尝试ws://127.0.0.1:8000/ws/test-view/ 而不是ws://127.0.0.1:8000/test-view/

application = ProtocolTypeRouter(
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            [
                url(r'^ws/test-view', consumers.TestConsumer),
            ]
        )
    ),
)

这里'webosocket' 定义你正在使用ws:// 协议,但url(r'^ws/test-view', consumers.TestConsumer) 定义你想在localhost 之后添加/ws/test-view/ 来连接它。

【讨论】:

不幸的是,这不起作用,它似乎在尝试连接之前,并且在出错之前有一点延迟。这立即被拒绝了 你能告诉我django服务器的日志,当你尝试连接它时?另外,你能告诉我你是如何运行 django 服务器的吗? 其实现在是(WebSocket connection to 'ws://127.0.0.1:8000/ws/test-view/' failed: Error during WebSocket handshake: Unexpected response code: 500 (anonymous) @ (index):18 python manage.py runserver 运行服务器,终端没有出现错误 这里的url还是ws://127.0.0.1:8000/test-view/

以上是关于Django 通道套接字未连接到消费者的主要内容,如果未能解决你的问题,请参考以下文章

Django DRF websocket 通道 2 并使用来自 Simple JWT 的令牌进行授权

将数据发送到 Django 通道

创建第一个 Celery 任务 - Django。错误 - “错误/MainProcess] 消费者:无法连接到 amqp://guest:**@127.0.0.1:5672//:”

如何在 django 频道中从消费者类外部发送普通 JSON 消息

芹菜未连接到 Redis Broker (Django)

信号未连接到方法