有一个单独的socket.io.js文件副本,而不是依赖socket.io应用程序提供的文件,这是个好主意吗



考虑这个场景:

  1. Socket.io应用程序由于某种原因关闭(或重新启动),大约花了2秒钟才重新启动(考虑到使用生产管理器应用程序ie:PM2
  2. 在3秒钟的停机时间内,客户端尝试请求客户端socket.io.js脚本(localhost:xxxx/socket.io/socket.io.js),结果在服务器再次启动之前请求失败(错误500404net::ERR_CONNECTION_REFUSED
  3. 在三秒钟的停机时间后,服务器文件再次可用

所以现在我别无选择,只能通知用户刷新以恢复实时事务。

我无法重试重新连接到socket.io服务器,因为我没有客户端脚本。

但是,如果它在其他地方提供服务,也许在jQuery所在的dir,我可以通过编写一个每隔几秒钟启动一次的简单重试函数来侦听io是否再次可用。

一般来说,最好使用Socket.IO提供的版本,因为这样可以保证兼容性。然而,只要您能够确保部署正确的版本,就可以将该文件托管在其他地方。事实上,它甚至是首选,因为您将从应用程序服务器上卸下静态负载,并将其放在其他地方。

一个简单的方法是配置Nginx或类似的文件来缓存该文件,并在上游服务器(带有Socket.IO服务器的Node.js)关闭时提供一个过时的副本。https://serverfault.com/q/357541/52951

最新更新