Обрабатывает ли режим кластера PM2 WebSockets в одном процессе? - PullRequest
0 голосов
/ 16 июня 2020

Я создаю простое приложение для чата, используя Node.js и Socket.io. Начал использовать PM2 для масштабирования моего приложения в разных экземплярах (в настоящее время для целей тестирования я использую 4 экземпляра в ОС Windows).

Во время тестирования я заметил, что весь трафик веб-сокетов c проходит через тот же идентификатор экземпляра, но если я принудительно подключу WebSocket к другому экземпляру, то все сообщения, которые я отправляю этому экземпляру, нельзя будет просмотреть в других существующих подключениях WebSocket, поскольку они выполняются в разных экземплярах.

Допустим, я хочу транслировать сообщение чата всем подключенным пользователям, используя режим кластера PM2. Как я могу этого добиться?

Я прочитал этот выпуск https://github.com/Unitech/pm2/issues/1510 указывая, что пока я использую только транспорт веб-сокетов в Socket.io, проблем быть не должно. Как это работает? Обрабатывает ли PM2 все соединения WebSocket внутренне, чтобы всегда указывать на один и тот же процесс?

1 Ответ

1 голос
/ 16 июня 2020

Чтобы использовать socket.io в кластерном режиме, вам необходимо использовать socket.io-redis в качестве адаптера сокета, чтобы все пользователи возвращались на свой предыдущий сервер каждый раз, когда они пытаются сделать запрос. , иначе получится 400 ошибок.

...