Как я могу масштабировать socket.io? - PullRequest
23 голосов
/ 10 мая 2011

Допустим, сервер получает 10000 одновременных подключений (через socket.io). Это много, и если он не может больше справляться, мне нужно раскрутить другой сервер.

Как я могу синхронизировать два сервера вместе с их socket.io?

Ответы [ 2 ]

42 голосов
/ 10 июня 2011

Я бы не использовал Cluster для масштабирования Socket.IO.Socket.IO 0.6 спроектирован как сервер с одним процессом и использует долгоживущие или опрашивающие соединения для установления соединения между сервером и клиентом в режиме реального времени.

Если вы разместите Cluster напротив своего клиента socket.io, вы в основном распределите транспорты опроса между различными серверами, которые не знают о клиенте.Это приведет к разрыву соединений.Но вещание всем вашим клиентам будет проблематичным, так как все они распределены по разным серверам, и у вас нет IPC между ними.

Так что я бы советовал использовать Cluster, только если вы используете только Web Socket &Флэш-сокет подключений и не нужно использовать функцию вещания.

Так что же вам делать?

Вы можете подождать, пока не будет выпущен socket.io 0.7, чторазработан с нуля для использования в нескольких процессах.

Или вы можете использовать pub / sub для отправки сообщений между различными серверами.

3 голосов
/ 10 мая 2011

Можно попробовать использовать, например, модуль cluster и распределить нагрузку на несколько ядер (если у вас многоядерный процессор).Если этого недостаточно, вы можете попытаться использовать обратный прокси для распределения запросов по нескольким серверам и redis в качестве центрального хранилища данных сеанса (если это возможно для вашего сценария).

...