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

如何在部署插槽交换后优雅地迁移打开的Websocket连接?

章德惠
2023-03-14

在我的web应用程序中,当用户登录到应用程序时,他们的浏览器打开一个到服务器的Websocket,以便更新可以下推到浏览器。

在某个时候,旧插槽将离线,这将强制关闭任何打开的WebSockets。我更希望在插槽交换后尽可能优雅地重新打开Websocket到新插槽,这样,如果我更新了Websocket相关代码,所有客户机都将尽快运行新代码。

这可能是如何工作的草图:

  1. 发生插槽交换
  2. 向旧插槽上运行的代码发送通知
  3. 运行在旧插槽上的代码推送Websocket消息以重新连接
  4. 收到消息后,浏览器打开一个新的Websocket连接(该连接将转到新插槽)
  5. 连接成功后,浏览器将关闭旧的WebSocket

共有1个答案

通博实
2023-03-14

WebSockets确实保持连接,因为ARR只能将新请求定向到“新”应用程序。例如,如果在交换过程中下载一个大文件,您将看到相同的行为。

我处理这一问题的方法是让我的部署系统(Octopus)进行交换,然后向“旧”应用程序发出请求,通知所有连接的WebSocket客户端需要断开连接并重新连接。客户端将立即断开连接,选择一个随机延迟(以防止一次数千次重新连接),然后在该延迟后重新连接。

 类似资料:
  • 问题内容: 我已经知道如何用辛苦的方式做到这一点,并使它起作用-遍历条目并“手动”交换。但是我想知道是否可以像许多任务一样以一种更优雅的方式解决这一问题。 我可以假设我的地图是双射的,顺便说一句:) 问题答案: 标准的API / Java运行时不提供双向映射,因此唯一的解决方案是遍历所有条目并手动交换它们。 您可以做的是创建一个包装器类,该包装器类包含两个映射,并且在内部进行双重处理,因此您可以快

  • 许多网站建议在停止水槽代理时使用kill -9。 然而,当我用kill-9停止代理时,HDFS接收器文件将永远保持打开状态(如*.tmp)。

  • 在这种情况下,优雅地关闭WebSocket的正确方法是什么?

  • 当在客户端和服务器之间建立了连接之后,就会从Web Socket实例触发事件。它是客户端和服务器之间的初始握手。 建立连接之后引发的事件称为。创建Web Socket连接非常简单。所要做的就是调用WebSocket构造函数并传入服务器的URL。 以下代码用于创建Web Socket连接 - 建立连接后,将在Web Socket实例上触发事件。 是指客户端和服务器之间的初始握手,它会产生第一次交换,

  • 我试图在我的Android应用程序中执行ping命令,并能够取消它/发送中断信号。基本上,我希望在任何普通的linux中,当你发送ctrl c到ping时,都能得到ping统计数据。我读过Send Ctrl-C to process open by Java,但它针对的是Windows平台,而tbh似乎有点过头了。我执行命令的代码(我使用的是rxjava): 以及开始/取消: 到目前为止,我试图终