@IlliaKharytonov

Как перезагрузить сервис на Go так, чтобы сохранить текущие WS соединения?

У меня есть сервис на Go, который держит большое количество клиентов по Websocket, слушащих данные. Типа, круглосуточно, и нежелательно чтобы соединение оборвалось. Допустим, мне надо сделать апдейт сервиса. Можно ли перезагрузить его так, чтобы клиентам не пришлось переподключаться?
Собственно, варианта пока что вижу два:
а) заложить такой функционал на стороне клиента (который я тоже пишу, но не хотелось бы так делать): сервис шлёт сообщение о своей перезагрузке, а клиент пытается переподключиться через время.
б) разбить сервер на две части, одна - только логика, другая - только обслуживание соединений, взаимодействие через MongoDB Capped Collection (что собственно подошло бы: данные со временем протухают, но вопрос в её производительности: отправлять данные надо как можно скорее).
Возможно, есть какое-то более элегантное / нативное решение?
Заранее спасибо.
Спасибо.
  • Вопрос задан
  • 516 просмотров
Пригласить эксперта
Ответы на вопрос 3
@RidgeA
есть такая штука как https://golang.org/pkg/plugin/
не знаю подойдет ли, но если подойдет - то разделить приложение на 2 части - одна - веб-сервер, вторая - вся логика, которая подключается как плагин. Вот его, насколько я понял, можно менять по-горячему

Если не подойдет, и вопрос сохранения соединений критичен, то все-равно разделить на две части, но они между собой должны общаться по какому-то IPC каналу (tcp/unix/whaterver). Это позволит вторую часть перезагружать не трогая первую.
Ответ написан
В чём проблема сделать на клиенте переподключение при обрыве? В любом случае это надо делать на случай проблем подключения к интернету у клиента.

Если совсем-совсем нельзя даунтайм иметь, можете сначала запустить новый сервис, перевести у клиентов все подключения на него и только потом гасить старый. Правда, ИМХО, это сильно более запарно чем автореконнект на клиенте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы