Я использую Ratchet (http://socketo.me/) для веб-сокетов в моем приложении PHP. У меня есть несколько виртуальных машин, на которых запущено приложение, и на каждой из этих машин также размещается служба websocket. Запросы передаются на одну из этих виртуальных машин через HAProxy. Также в настоящее время пользователь использует службу websocket на том же узле, к которому он подключается для приложения.
Теперь у меня проблема с тем, что серверы websocket обсуждают друг с другом. Например:
- user1 подключается к node1, а user2 подключается к node2
- User1 отправляет сообщение websocket через websocket пользователю user2
- Пользователь2 никогда не получает это сообщение, потому что он подключен к другому узлу
Каковы передовые методы обмена сообщениями такого типа? У меня есть идеи, но я не знаю, по какому пути идти:
- Каждый клиент подключается к каждому узлу веб-сокета.
- Серверы также публикуют сообщения для всех остальных узлов.
- Используйте базу данных для синхронизации сообщений между узлами
И 1-й, и 2-й варианты не очень масштабируемы, если к облаку подключены новые узлы. 3-й вариант вызовет некоторую задержку, потому что необходимо в цикле проверять, находятся ли сообщения от других узлов в базе данных.
Есть ли другие способы справиться с подобными ситуациями? Спасибо за ответы!