Как обрабатывать липкие сессии с Socket.io 1.0 за брандмауэром?

Я пытаюсь настроить POC для себя, используя Nginx, Node.js и Socket.io 1.0, используя кластеризацию в Rackspace. Я предполагаю, что мне нужно использовать кластеризацию, потому что я хочу, чтобы это было масштабируемым на несколько серверов, если это необходимо. Я хочу, чтобы у каждого узла был свой экземпляр, и на данный момент я не вижу необходимости для каждого экземпляра общаться по любой причине. Опять же, на данный момент, я считаю, что мне нужно использовать кластеризацию просто потому, что у меня может быть много клиентов, подключающихся к этому серверу, и я хочу, чтобы он мог соответственно увеличиваться и уменьшаться. Моя конечная цель - создать небольшой POC, похожий на тот, что показан здесь: https://cloud.google.com/developers/articles/real-time-gaming-with-node-js-websocket-on-gcp

Я только что получил, как я считаю, действительную настройку нового установленного Socket.io 1.0, но при подключении с разных устройств за моим маршрутизатором все они показывают одинаковый PID в моем журнале, и я предполагаю, что это связано с необходимой липкой -сессия на Socket.io. Я не уверен, что это то же самое, что рабочий процесс, который мы использовали при кластеризации, но опять же я все еще пытаюсь обернуть голову вокруг всего этого.

Прежде всего, я хочу знать, требуется ли использование кластеризации и sticky-сессий, поскольку для одного и того же внешнего IP-адреса выдается только 1 PID. В любом случае нужно ли рассматривать каждый компьютер как свой собственный экземпляр? Я не хочу отправлять ответ, который обновляет всех за этим IP.

Мой второй вопрос - это, и это может быть глупый вопрос, но я все равно задаю:) Читая о том, как заставить работать sticky-сессии, я продолжал видеть людей, заявляющих, что они "используют sticky-сессии, как по IP-адресу". Слово "как" это то, что получил меня. Кажется, я нашел людей, которые ссылались на использование sticky-сессий с IP и куки. Можете ли вы сделать это с помощью чего-либо еще, например, имени пользователя, выданного токена или чего-то еще? Меня беспокоит то, что если кто-то играет с этим на мобильном устройстве и переключает вышки, вышка выдаст новый IP, так что в свою очередь будет выдан новый PID и, по сути, игра игроков проиграет. Я правильно понимаю?

Пожалуйста, прости меня, так как я новичок в Node.js, но подумал, что это будет крутой способ изучения node.js и кластеризации в облаке. Любая информация или направление, которые кто-либо может предоставить, будут очень полезны. Похоже, что многие из этих рассылок транслируют события всем, но я ищу масштабируемое решение, в котором каждому соединению можно отправлять события индивидуально в большинстве случаев. Мне также нужно решить, чтобы несколько человек за одним и тем же брандмауэром рассматривались как отдельные соединения, когда сервер связывается с ними. Опять же, если есть какие-либо материалы для чтения или учебники, которые, по вашему мнению, могут помочь мне с socket.io 1.0 и что я пытаюсь сделать, пожалуйста, ответьте Спасибо!

1 ответ

Решение

В общем, так как вы используете websockets Вам не нужно беспокоиться о липкости, пока соединение не прерывается. Это сообщение является двунаправленным, и соединение http сохраняется. Если соединение обрывается, клиент, по сути, переподключается и начинает заново. Так что да, если чей-либо IP-адрес будет обновлен, вы получите новый сокет сервера.

Обратитесь к статье using-множественные узлы, где изложено требование для клиентов длинных опросов XHR/JSONP.

Я не верю, что nginx имеет возможности балансировки нагрузки на такие вещи, как MAC-адрес и т. Д. В соответствии с методами балансировки нагрузки nginx.

Я думаю, что вам может понадобиться надежный балансировщик нагрузки, который может использовать MAC-адреса, идентификатор виртуального порта или некоторые заголовки для маршрутизации.

Другие вопросы по тегам