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