背景
我在 Azure 应用服务部署方面遇到了麻烦。我使用 VSTS 通过 Azure 应用服务部署功能进行部署。我正在将 Docker 容器部署到 Linux 应用服务插槽。Docker 容器正在运行 Node.js WebSocket 服务器,该服务器在连接时会根据构建过程中创建的文本文件返回当前应用版本的消息。
在我的客户端应用中,我已将其设置为在收到消息时从 WebSocket 服务器获取应用版本。它的作用是确定 WebSocket 服务器版本是否与客户端版本匹配。当 WebSocket 连接因重启或部署而丢失时,客户端应用将尝试重新连接,直到 WebSocket 服务器重新上线。
问题
部署似乎会创建 2 个版本的应用服务。一个是原始版本,另一个是最新部署。如果我打开浏览器窗口,它应该会注意到部署已发生并通知我应用版本已更改。这种情况似乎偶尔发生。
确保客户端应用程序注意到应用程序版本更改的唯一方法是通过 Azure 门户手动重新启动应用程序服务或刷新浏览器窗口。否则,浏览器将不会触发 WebSocketonclose
或会在 2-40 分钟后触发它。虽然我对 2 分钟没问题,但超过 5 分钟就不行了。
测试
当我在本地运行它时,我没有遇到任何这些问题,所以我将它们归因于 Azure 环境。
当我单独在 VSTS 中执行部署发布时,WebSocket 连接关闭似乎是随机的,但它确实发生在 2-40 分钟的时间范围内。
我尝试设置我的 VSTS 版本以在部署后重新启动应用服务,但只有少数浏览器会注意到 WebSocket 连接关闭。
在另一个 VSTS 版本中,我在部署之前重新启动了应用服务。这只对 50% 的部署有效。其余的部署不会触发。
我还尝试设置 VSTS Release 以停止应用服务,部署更改,然后重新启动。这大约有 80% 的机会更新已部署的版本。
问题
如何确保部署到 Azure 应用服务后,先前运行的 WebSocket 连接立即断开,而不是在某个不确定的时间之后断开?