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

Is it a good idea to have a separate copy of the socket.io.js file instead of relying on the file served by a socket.io app?

考虑这种情况:

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

所以我现在没有别的办法,只能通知用户刷新以恢复实时交易。

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

但是如果它在其他地方提供,也许在 dirjQuery 相同的地方,我可以通过编写一个简单的重试函数来监听 io 是否再次可用,该函数每隔几个秒。

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

一个简单的方法来做你想做的事情是配置 Nginx 或类似的缓存文件并在上游服务器(你的 Node.js 和 Socket.IO 服务器)关闭时提供一个陈旧的副本。 https://serverfault.com/q/357541/52951