Мы используем socketIO в большом приложении чата.
В некоторых случаях мы хотим отправить "присутствие" (доступность пользователя) всем другим пользователям.
io.in('room1').emit('availability:update', {userid='xxx', isAvailable: false});
В комнате 1 может быть много пользователей (максимум 500). Мы наблюдаем значительный подъем в нашей нагрузке NodeJS, когда запускается много обновлений доступности.
Идея заключалась в том, чтобы использовать что-то похожее на redis store с Socket IO. Попросите клиентов веб-браузера подключиться к различным серверам NodeJS.
Когда мы хотим выпустить в комнату, мы отправляем полезную нагрузку "emit to room1" на все остальные процессы NodeJS, используя Redis PubSub ZeroMQ или даже RabbitMQ для сохранения. Каждый процесс сам назовет его собственный io.in('room1').emit, чтобы нацелить его подмножество подключенных пользователей.
Одна из проблем, связанных с этой настройкой, заключается в том, что межпроцессная связь может стать довольно занятой, и мне было интересно, может ли она стать проблемой в будущем.
Вот архитектура, которую я имею в виду.
