多个独立的 websockets 连接

Posted

技术标签:

【中文标题】多个独立的 websockets 连接【英文标题】:multiple independent websockets connections 【发布时间】:2021-03-16 20:08:03 【问题描述】:

我一直在玩 django 频道 + 角度。我创建了一个应用程序,它只是通过计数器 1、2、3、4 向前端发送通知。它工作正常,除非我在多个选项卡中打开页面。我也无法断开与 websocket 的连接,我可以使用取消订阅,但它并没有真正关闭连接,但这更像是一个角度问题。无论如何,我怎样才能使我的套接字多线程,所以如果我从同一台计算机但从不同的选项卡发出多个请求,它将起作用,因此将创建 2 个不同的消费者实例,如果我在同一台计算机上加载 2 个页面,计数器应该不同的独立增加计数器。我需要 redis 吗?

【问题讨论】:

你想要的是默认行为。如果您从每个选项卡中的角度侧创建单独的连接,那么您将在 Django 侧具有单独的连接。当前打开单独的选项卡时究竟会发生什么?你应该对你的问题提出质疑。至于 Redis,您将需要一个正常运行的 Channel 层(Redis、Rabbit-MQ 等)来实现跨不同服务器实例的群组消息传递以及 Channels 中的其他内容,但不是专门为此 当我打开 2 个选项卡时,其中一个将冻结,前端实际上不会收到任何内容,似乎从服务器发送的两条消息都转到了最近打开的页面。只允许一个连接。我在本地运行它也许这是导致问题的原因? 【参考方案1】:

我的 url 路由器丢失了 .as_asgi() 这有效:

URLRouter([path('wscrawpredict', CrawPredictConsume.as_asgi(),name="wscraw")])

【讨论】:

以上是关于多个独立的 websockets 连接的主要内容,如果未能解决你的问题,请参考以下文章

使用WebSocket实现聊天室

记一次websocket连接不上问题?

基于“广播”或“房间”的 Websocket 策略

webSocket 简单介绍

使用 websocket 的 Web 应用程序“无法建立连接。接收端不存在。”

从 C# 程序连接基于 node.js 的 socket.io WebSocket 服务器