Я хотел бы разработать масштабируемый чат-сервер, который будет работать только в том случае, если Алиса и Боб находятся в сети, и нет необходимости в автономных сообщениях. Я думал об использовании следующего метода:
- Вход Алисы и Боба, оба создают
websockets
соединение, и оно сохраняется открытым процессом sender
на сервере B . - Алиса отправляет сообщение «Привет, Боб» на сервер A
- Сервер A записывает сообщение в очередь
to_send
- Процесс
sender
(на сервере B ) берет сообщение и отправляет его Бобу.
Вопросы о том, как это будет работать в реальной жизни (если вообще будет):
- может процесс
sender
оставить открытым websockets
соединение с Бобом вместе с другими websockets
соединениями со многими другими Бобами? - как очередь
to_send
направит сообщение на правильный сервер (B), который содержит процесс с открытым подключением websockets
к нужному Бобу? (было бы много других серверов C, D, E ... все с sender
процессами, но ни один из них не содержал бы соединение с нашим Бобом) Может ли это быть достигнуто, например, с помощью kafka
разделов? (разделено user_id
?) - как будет выглядеть процесс
sender
? asyncio
l oop, который постоянно читает из очереди и затем отправляет правильное соединение?
Спасибо, дайте мне знать, если это не так.
(аналогично https://softwareengineering.stackexchange.com/questions/339882/system-design-scalable-chat-server, но нет сообщений в автономном режиме)