У меня проблемы с развертыванием службы приложений Azure. Я использую VSTS для развертывания с помощью функции развертывания службы приложений Azure. Я развертываю контейнер Docker в слот службы приложений Linux. В контейнере Docker запущен сервер Node.js WebSocket, который при подключении отправляет сообщения с текущей версией приложения на основе текстового файла, созданного как часть сборки.
В моем клиентском приложении я настроил его на получение версии приложения с сервера WebSocket при поступлении сообщения. Его роль определяет, соответствует ли версия сервера WebSocket версии клиента. Когда соединение WebSocket потеряно из-за перезапуска или развертывания, клиентское приложение будет пытаться повторно подключиться, пока сервер WebSocket не вернется в режим онлайн.
Похоже, что развертывания создают 2 версии службы приложений. Один является оригиналом, а другой - последним развертыванием. Если у меня открыто окно браузера, он должен заметить, что произошло развертывание, и уведомить меня об изменении версии приложения. Похоже, это случается спорадически.
Единственный способ убедиться, что клиентское приложение замечает изменение версии приложения, - это вручную перезапустить службу приложения через портал Azure или обновить окно браузера. В противном случае браузер не запустит WebSocket. onclose
или вызовет его через 2-40 минут. В то время как меня устраивает 2 минуты, меня не устраивает все, что больше 5.
Когда я запускаю это локально, у меня не возникает ни одной из этих проблем, поэтому я приписываю их среде Azure.
Когда я выполняю развертывание в VSTS отдельно, соединение WebSocket закрывается случайным образом, но это действительно происходит в течение этих 2-40 минут.
Я попытался настроить выпуск VSTS для перезапуска службы приложений после развертывания, но тогда только несколько браузеров заметили закрытие соединения WebSocket.
В другом выпуске VSTS мне пришлось перезапустить службу приложений перед развертыванием. Это сработало только для 50% развертываний. Остальное не сработает.
Я также попытался настроить выпуск VSTS, чтобы остановить службу приложения, развернуть изменение, а затем запустить его снова. Вероятность обновления развернутой версии составила около 80%.
Как я могу гарантировать, что после развертывания в службе приложений Azure предыдущее работающее соединение WebSocket отключится немедленно, а не через какое-то неопределенное время позже?