Мы используем 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
, чтобы нацелить его подмножество подключенных пользователей.
Одна из проблем, связанных с этой настройкой, заключается в том, что межпроцессная связь может стать довольно занятой, и мне было интересно, может ли она стать проблемой в будущем.
Вот архитектура, которую я имею в виду.