У меня есть стандартная установка экземпляра LAMP EC2, работающая на AWS Amazon. Также установив Node.js, socket.io и Express для удовлетворения требований живого обновления, я сейчас на этапе балансировки нагрузки приложения. Это все работает, но моих сокетов нет. Это как моя установка выглядит: -Узел socket.io на балансе нагрузки Amazon EC2
--- EC2 >> Node.js + socket.io
/
Client >> ELB --
\
--- EC2 >> Node.js + socket.io
[RDS MySQL - EC2 instances communicate to this]
Как вы можете видеть, каждый экземпляр имеет установку узла и Socket.io. Однако иногда из-за отладки Chrome 400 запрос сокета возвращает причину {"code":1,"message":"Session ID unknown"}
, и я предполагаю, что это связано с тем, что он обменивается данными с другим экземпляром.
Кроме того, предположим, что я нахожусь на странице A, и сокет должен излучать на страницу B - из-за балансировки нагрузки эти две страницы могут быть в другом экземпляре (оба они будут одновременно открытыми). Насколько я знаю, использование чего-то вроде Sticky Sessions не будет работать в этом сценарии, потому что обе страницы будут ограничены их соответствующими экземплярами.
Как я могу обойти эту проблему? Мне нужен цельный выделенный экземпляр только для узла? Это кажется несколько излишним ...
Но будет ли это работать с socket.io? Это, безусловно, указывает на проблемы управления сеансом. Мы использовали MySQL, Mongo и Dynamo для управления сессиями в Node на серверах EC2 с балансировкой нагрузки, все они работают. Express позволяет подключаемым модулям иметь дело с этим, и они существуют для всех вышеперечисленных баз данных. Но я не пробовал это с socket.io. Это стоит исследовать, но предыдущий ответ может указывать на актуальную проблему. – CargoMeister
Он должен работать в Express, когда у вас есть общий магазин сеансов, как в узле. Общий магазин сеансов - это клей, который держит его вместе. Таким образом, вы не полагаетесь на ELB для поддержки клиента 1 на сервере B. Клиент 1 может быть отправлен на любой доступный сервер, и он найдет сеанс и обработает транзакцию. –