Заставьте WebSocket иметь точно 0% случаев потери сообщений (даже 0,001% недопустимо: /) - PullRequest
0 голосов
/ 13 апреля 2020

Мы разрабатываем приложение, в котором потеря 0,001% сообщений в WebSocket приведет к проблемам (для простоты рассмотрим его как приложение для обмена сообщениями, такое как telegram / slack / et c).

Мой текущий дизайн: используйте простую стратегию «ACK уровня приложения» (аналогичную дизайну TCP).

  1. Сервер отправляет клиенту сообщение M1 (через WebSocket).
  2. Клиент получает его и после правильной обработки отправляет сообщение ACK.
  3. Сервер получает ACK и помечает сообщение M1 как «все готово».
  4. На сервере установлен таймер. Если сервер не получает ACK 3s после отправки сообщения, сервер просто снова отправляет сообщение M1.
  5. Если после нескольких повторных попыток все не удаются, сервер будет использовать APNs et c для отправки это.

Интересно, достаточно ли этого для точно 0% потери сообщений? Или мне нужно что-то еще?

EDIT : допустим следующий случай - возможно потеря сообщения, но клиент (пользователь) знает об этом, видя, как клиент создает предупреждение, или видя, что клиент ведет себя ненормально. Другими словами, мы не можем принять только тот случай, когда сообщения потеряны и конечный пользователь не знает, что .

Между тем, если это может быть fast (низкая задержка ) было бы лучше.

Спасибо за любые идеи!

...