масштабируемый чат-сервер, который отправляет сообщения через веб-сокеты - PullRequest
0 голосов
/ 19 апреля 2020

Я хотел бы разработать масштабируемый чат-сервер, который будет работать только в том случае, если Алиса и Боб находятся в сети, и нет необходимости в автономных сообщениях. Я думал об использовании следующего метода:

  1. Вход Алисы и Боба, оба создают websockets соединение, и оно сохраняется открытым процессом sender на сервере B .
  2. Алиса отправляет сообщение «Привет, Боб» на сервер A
  3. Сервер A записывает сообщение в очередь to_send
  4. Процесс sender (на сервере B ) берет сообщение и отправляет его Бобу.

Вопросы о том, как это будет работать в реальной жизни (если вообще будет):

  1. может процесс sender оставить открытым websockets соединение с Бобом вместе с другими websockets соединениями со многими другими Бобами?
  2. как очередь to_send направит сообщение на правильный сервер (B), который содержит процесс с открытым подключением websockets к нужному Бобу? (было бы много других серверов C, D, E ... все с sender процессами, но ни один из них не содержал бы соединение с нашим Бобом) Может ли это быть достигнуто, например, с помощью kafka разделов? (разделено user_id?)
  3. как будет выглядеть процесс sender? asyncio l oop, который постоянно читает из очереди и затем отправляет правильное соединение?

Спасибо, дайте мне знать, если это не так.

(аналогично https://softwareengineering.stackexchange.com/questions/339882/system-design-scalable-chat-server, но нет сообщений в автономном режиме)

...