一尘不染

如何维护页面之间的WebSockets连接?

javascript

在我的一个脚本中,我有以下代码:

var webSocket = window.WebSocket || window.MozWebSocket;
window.ws = new webSocket('ws://64.121.210.140:2585/consoleappsample', 'my-protocol');

哪个工作正常。但是,当用户更改页面时,我必须重新建立连接。我相信这会在我的代码中引起问题,因为如果客户端将数据发送到服务器,然后更改页面,则可能无法接收到数据并且正在发生争用情况。

我试图将window.wsin 放到全局范围内,但似乎并不能解决问题。WebSockets连接是否可以在页面之间持久保存,因此不需要不断地重新建立连接?


阅读 377

收藏
2020-05-01

共1个答案

一尘不染

您提到的全局范围始终与JavaScript上下文相关,并且为每个窗口创建一个上下文(并在从内存中卸载文档时销毁了该上下文)。因此,您的工作没有用:如果用户更改页面,则无法保持连接打开。当然,您可以将webapp作为“单页”应用程序使用,其中所有数据都使用XMLHttpRequest
/ ajax / WebSocket加载。因此,离开页面意味着离开/关闭应用程序,并有意义地关闭套接字。

另一种古老的方法是将页面放在框架中,用户仅在框架中导航(即使它占据了整个窗口的大小)。这样,您可以在最顶部的窗口中创建WebSocket,该窗口永远不会更改(这也意味着在位置栏中显示的URL将始终相同)。

话虽如此,我同意@dystroy的观点:您的应用程序应始终能够处理这种情况-用户可能会遇到一些网络问题,即使它没有离开页面,也可能会暂时失去连接。

2020-05-01