【问题标题】:Django channels Disconect after closing the tab关闭选项卡后 Django 频道断开连接
【发布时间】:2022-02-10 19:38:17
【问题描述】:

我是 Django 频道的新手,我正在构建一个简单的聊天室。有了这个聊天室,如果用户关闭浏览器选项卡,我想断开用户的连接,如果他用相同的链接重新打开选项卡,我想将他重新连接到他原来的聊天室。我该怎么做?

【问题讨论】:

    标签: django django-rest-framework django-channels


    【解决方案1】:

    为了重新连接到同一个 WebSocket,您只需再次连接到同一个 URL。在客户端(浏览器)端,您可以使用示例 JavaScript 代码:

    webSocket = new WebSocket('ws:/localhost:8000/ws/chat/');
    

    当没有客户端连接时,服务器端(“后端”,即 Django Channels)关闭连接。

    您的意思可能是您想访问聊天记录,是吗?据我了解,WebSocket 它是一种通信协议(在某种意义上类似于 HTTP)。所以它只是用来发送消息,而不是存储它们。无论如何,您都应该将消息存储在某个地方,例如,在数据库中。然后,在“重新连接”时,您实际上是通过views 从数据库中获取消息,或者以不同的方式使用consumers

    希望对您有所帮助。您必须为我指定一个具体的场景才能进一步帮助您。

    【讨论】:

    • 刷新浏览器是否有效?抱歉,如果我没有指定,但是当我刷新浏览器时,它会立即断开我与会话的连接。我不希望这种情况发生。
    • 不幸的是,它几乎必须发生。我的意思是,在刷新会话(websocket 连接)时断开连接,然后重新启动。重新连接很可能由应用程序(websocket 客户端)浏览器端的 JavaScript 代码处理/触发。将 WebSocket 视为一种恒定的 HTTP 连接,但在某些时候必须终止此连接。为什么要在刷新后保持连接?尽管断开连接并再次连接,连接仍然存在。
    • 也许您可以增加服务器端的超时以在刷新的情况下为客户端(浏览器)“稍等一下”,但这不是 WebSocket(和 Django 通道)的设计方式,对不起。无论如何,我希望对你有所帮助。
    • 另请参阅有关在后端关闭连接(处理正在关闭的连接)的文档:channels.readthedocs.io/en/stable/topics/…
    猜你喜欢
    • 2018-11-23
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2012-11-30
    相关资源
    最近更新 更多