Скажем, сервер получает 10 000 одновременных подключений (через socket.io). Это много, и если он не может справиться больше, мне нужно развернуть еще один сервер.
Как синхронизировать два сервера вместе со своим socket.io?
Ответ 1
Вы можете попытаться использовать, например, cluster модуль и распределить нагрузку на несколько ядер (в случае, если у вас многоядерный процессор). В случае, если этого недостаточно, вы можете попытаться использовать обратный прокси для распространения запросов на нескольких серверах и redis в качестве хранилища данных центрального сеанса (если это возможно для вашего сценария).
Ответ 2
Я бы не использовал Cluster для масштабирования Socket.IO. Socket.IO 0.6 спроектирован как единый сервер процессов и использует длинные живые соединения или опросные соединения для достижения реального времени между сервером и клиентом.
Если вы кладете Cluster infront вашего клиента socket.io, вы будете в основном распространять опросы между различными серверами, которые не знают о клиенте. Это приведет к поломке соединений. Но также передача всем вашим клиентам будет больно, поскольку все они распространяются на разных серверах, и у вас нет IPC между ними.
Поэтому я бы посоветовал использовать Cluster, если вы используете только соединения Socket и Flash Socket и не должны использовать функции широковещания.
Итак, что вы должны делать?
Вы можете подождать, пока не будет выпущен socket.io 0.7, который разработан с нуля, чтобы использоваться для нескольких процессов.
Или вы можете использовать pub/sub для отправки сообщений между разными серверами.