将主要 socket.io 升级(1.4.5 到 2.0)部署到生产环境的建议方法

Suggested way to deploy major socket.io upgrade (1.4.5 to 2.0) to a production environment

由于socket.io 2.0 不向后兼容(https://socket.io/blog/socket-io-2-0-0/) 我很好奇生产升级的建议程序是什么。

问题是部署时有很多人连接到服务器,部署完成后他们仍然很可能使用旧的 socket.io 客户端尝试重新连接。

在我的案例中,向后不兼容 (1.4.5 -> 2.0) 变得非常麻烦,因为旧客户端不断以疯狂的速度发送握手请求,而新服务器不断推开它们,导致巨大的 cpu 和服务器上的 ram 加载。

在这种情况下有什么建议的策略(最好是长期的,即也照顾未来的更新)?这不是第一个 socket.io 向后不兼容的版本,我有一种强烈的感觉,已经有好的实践在起作用。

提前谢谢你, 瓦西里·诺莫夫

我可能会求助于在套接字上添加一个 "connect_error" 侦听器,当 1.4.5 兼容 socket.io 客户端尝试连接到 2.0 [=14] 时,解析器错误会触发该侦听器=] 服务器,我将从那里重新加载页面并让浏览器加载新的 javascript 包括更新的 socket.io 客户端,如下所示:

socket.on('connect_error', function (error) {
  if (error.code === 'parser error') {
    // potential socket.io protocol update
    socket.io.reconnection(false); // stop reconnection attempts
    socket.disconnect();

    // additional check in case there is no actual socket.io client update, but rather some other reason for parser error being thrown
    var upgradeCheckedAlready = window.sessionStorage.getItem('socket.io-upgrade-check');
    if (!upgradeCheckedAlready) {
      window.sessionStorage.setItem('socket.io-upgrade-check', 1);
      window.location.reload();
    }
  }
})