刷新页面后,为什么我的WebSocket连接关闭?

时间:2020-02-21 17:37:11

标签: javascript node.js websocket

我使用纯nodejs和Websocket模块编写了简单的聊天应用程序。一切正常,但是如果页面刷新的连接状态更改为closed,并且说明中显示该内容Remote peer is going away。我知道它是RFC 6455的标准代码,但是为什么我的连接没有随页面更新,所以聊天继续进行。如何在客户端处理页面刷新?

1 个答案:

答案 0 :(得分:1)

在浏览器中刷新页面,关闭并释放与原始页面相关的所有资源,然后加载该页面的新副本并再次运行该页面中的任何Javascript。

因此,如果您的页面初始化代码包括打开服务器的webSocket,则该WebSocket将在重新加载页面时关闭。

这是在初始页面加载然后刷新时发生的情况:

  1. 用户请求您的页面
  2. 浏览器为该页面加载HTML
  3. 浏览器在该页面中运行Java语言
  4. 该Javascript创建了到服务器的webSocket连接
  5. 用户按下刷新
  6. 浏览器关闭与原始页面相关的所有资源,包括关闭webSocket连接。
  7. 浏览器重新加载页面的原始HTML
  8. 浏览器再次在该页面中运行Java语言
  9. 该Javascript为您的服务器创建了一个新的webSocket连接

如何在客户端处理页面刷新?

刷新后,浏览器将在您的页面中运行Javascript,并且该Javascript应该只打开一个新的webSocket连接并应该建立一个新的聊天连接。


仅供参考,您引用的that code至少有一个错误。例如,从服务器端索引中删除客户端的服务器端代码无法正常工作。它会记住将客户端连接添加到数组时的索引,并假定索引永不更改,但这只是错误的。随着客户端从阵列中添加/删除和它们连接/断开连接,索引可能会更改。如果要使用该代码,则必须对其进行修复/调试。

虽然可以使用Array进行操作,但我自己也可以使用Set,这样也可以更轻松地删除项目。

相关问题