2016-05-01 2 views
1

Я хочу использовать socket.io, но я буду запускать несколько экземпляров моего приложения, так что это интересно.Socket.io и Redis pub/sub

  • Мне нужно запустить несколько экземпляров на разных портах. Здесь нет проблем.

  • Я решил не использовать собственный кластер Node, я буду использовать Nginx для балансировки нагрузки (вот почему я создаю несколько экземпляров приложения). Nginx поддерживает веб-порты, поэтому этот также сортируется.

  • Учитывая, что будет несколько экземпляров, не все из них не могут напрямую разговаривать друг с другом (пользователь A подключается к экземпляру X, если пользователь B подключен к экземпляру Y, они не могут общаться с серверов независимы друг от друга), поэтому мне нужно использовать механизм pub/sub для Redis в качестве обертки, чтобы имитировать функцию рассылки сокетки &. Таким образом, даже если у меня есть несколько экземпляров приложения или запускайте его на разных серверах, каждый сможет разговаривать друг с другом, пока они подключены к тому же серверу Redis. Для этого мне нужно будет использовать модули socket.io-redis и socket.io-emitter.

Есть ли у меня это право, есть ли что-то не так с этим подходом?

ответ

1

Звучит неплохо, возможно, кроме того, что вы уверены, что вам нужно несколько экземпляров вашего приложения Node на разных портах? Поскольку вы можете обрабатывать больше нагрузки, чем вы предполагали бы с одним сервером, и есть способы разделить различные каналы связи с socket.io.

+0

Я хочу использовать все процессоры, кажется, что есть два способа его достижения, используя кластерный модуль (собственное решение) или создание нескольких экземпляров (равное количеству ядер), используя Redis для pub/sub для связи сокетов (поскольку они не могут напрямую разговаривать друг с другом, если они не находятся на одном сервере) и позволяя Nginx обрабатывать балансировку нагрузки между этими экземплярами. Он также должен работать для нескольких серверов, которые запускают несколько экземпляров. Это верно? – salep

+1

Я думаю, что вы говорите, будет работать, просто подумал, что вы, возможно, захотите дважды проверить, действительно ли вы были связаны с ЦП. Разумеется, хорошо иметь масштабируемое решение, если вы столкнетесь с проблемами CPU/IO в будущем с помощью всего одного процесса, но это не гарантия того, что вы столкнетесь с этим узким местом. –

+0

Я, вероятно, не буду сталкиваться с этим узким местом в ближайшее время (может быть, никогда), но хочу иметь масштабируемое решение, которое использует столько ресурсов, сколько может. Благодаря! – salep

Смежные вопросы