当前位置: 首页 > 知识库问答 >
问题:

使用Django通道的Websocket

秋兴思
2023-03-14

我正在尝试使用Django通道与浏览器建立websocket连接。websocket无法与服务器连接:

[2017/01/23 23:51:50] HTTP GET / 200 [0.03, 127.0.0.1:60445]
[2017/01/23 23:51:51] WebSocket HANDSHAKING /chat/ [127.0.0.1:60451]
[2017/01/23 23:51:56] WebSocket DISCONNECT /chat/ [127.0.0.1:60451]
    socket = new WebSocket("ws://" + window.location.host + "/chat/");
    socket.onmessage = function (e) {
        alert(e.data);
    };
    socket.onopen = function () {
        socket.send("hello world");
    };
    // Call onopen directly if socket is already open
    if (socket.readyState == WebSocket.OPEN) socket.onopen();
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgiref.inmemory.ChannelLayer",
        "ROUTING": "django_chat_server.routing.channel_routing",
    }
}
channel_routing = {
    # Wire up websocket channels to our consumers:
    'websocket.connect': ws_add,
    'websocket.receive': ws_message,
    'websocket.disconnect': ws_disconnect,
}

我使用命令Python manage.py runserver运行服务器。

编辑:降级到twisted16.2.0版。无济于事。

共有1个答案

东方栋
2023-03-14

您还应该有一个websocket.Connect使用者并接受连接,只有在接受连接之后,协议服务器才会完成websocket握手

channel_routing = {
    "websocket.connect": consumers.ws_connect,
}

消费者。py

def ws_connect(message):
    message.reply_channel.send({
        'accept': True
})

参见http://channels.readthedocs.io/en/latest/releases/1.0.0.html#websocket-accept-reject-flow

 类似资料:
  • 问题内容: 我正在使用goroutines / channels检查网址列表是否可以访问。这是我的代码。这似乎总是返回true。为什么超时情况没有得到执行?目标是即使无法访问其中一个网址也要返回false 问题答案: 将在 当前的 goroutine(即正在运行的goroutine)中休眠。该语句仅在返回后才能正确运行,并且到那时,这两个分支都可以运行,并且运行时可以选择任何一个它。 您可以通过在

  • 我有一个Django Vue。我正在尝试连接到django频道的js聊天应用程序。 要访问任何聊天室,您只需访问: http://localhost:8080/rooms/"id"/ 我的javascript连接如下所示: 我的consumers.py: 我的routing.py: 我的项目routing.py: 问题是,我无法连接到websocket,我的django服务器说: [失败实例:回溯

  • 问题内容: 我正在尝试遵循Django频道教程。我能够实现此处所述的聊天功能。但是从此页面粘贴的单元测试完全复制失败,并出现以下错误。 完整回溯: 我的消费阶层: 我的测试模块: 我正在使用Python 3.5和Django 2.0。 问题答案: 无法序列化包含lambda的对象。经过一些研究,这似乎与Windows环境中的多处理问题有关(并且不仅限于此示例)。 解决此问题的一种方法是 替换为 莳

  • 我能够使用Azure CLI模板部署Azure Bot注册通道 https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-deploy-cli 但我不知道如何在同一脚本中为新创建的频道设置Facebook频道凭据。 https://docs.microsoft.com/en-us/bo

  • 所以在Android开发者文档中(https://developer.android.com/training/notify-user/build-notification)它给出了创建通知通道的命令行: 但复制了准确的代码块后,我得到了错误: 我认为这是一个方法,但不是从它的类(上下文)中调用的?但为什么会出现在文档中?我应该换成什么?

  • 主要内容:静态网页,从数据库列表和显示数据在某些情况下编写视图代码,正如我们所看到前面工作真的很繁重。想象一下,只需要一个静态页面或列表页。 Django还提供了一种简单的方法来设置这些简单的视图被称为通用视图。 不同于传统的视图,一般的视图是一个类但没有函数。Django还提供了一组类 django.views.generic 通用视图,以及每一个普通视图是这些类或从它们中的一个类继承的。 有10+泛型类− 你可以使用通用视图。让我们来