Как излучать сообщения между многими узлами js серверов - PullRequest
0 голосов
/ 05 сентября 2018

Поскольку я новичок, нужна помощь. Мне нужно отправлять сообщения между многими серверами nodeJS. Мне нужно, чтобы связь была сервер-сервер, а не сервер-браузер (какие шаблоны я нашел). Для того, что я читаю, мне может понадобиться Redis. Я уже установил его, и он готов принимать соединения. Если я попробую этот код из socket.io

var io = require('socket.io')(3000);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));
io.emit('hi', 'all sockets');    

... ничего не происходит. Любой советует, что отсутствует или другие шаблоны, которые я могу реализовать? Спасибо!

1 Ответ

0 голосов
/ 05 сентября 2018

Вы можете попробовать использовать RabbitMQ для обмена сообщениями.

RabbitMQ - очень мощная концепция при создании приложений, которые необходимо масштабировать. При построении распределенных систем обычно используется рабочая очередь, которая отделяет производителей работы от потребителей (работников).

  • Сообщения отправляются производителями
  • Сообщения доставляются потребителям
  • Сообщения проходят через канал

enter image description here

Существует много шаблонов обмена сообщениями, которые были написаны о тошноте. Два заслуживающих внимания шаблона обмена сообщениями в контексте RabbitMQ - это «Конкурирующие потребители» и «Удаленный вызов процедур».

Использование Rabbit MQ с системой обмена сообщениями конкурирующих потребителей

В качестве иллюстрации рассмотрим пользователя, которому необходимо импортировать большой объем данных. Обработка этих данных требует много ресурсов процессора. Наивная реализация может быть:

  • Пользователь загружает данные (запрос)
  • Сервер обрабатывает данные
  • Ответить пользователю с результатом (ответить)

Если вы попытаетесь обработать эти данные напрямую, используя процесс Node.js, вы заблокируете цикл обработки событий. Любые запросы, поступающие во время обработки данных, должны будут ждать, что не очень хорошо. Система не отвечает. Лучшим подходом было бы:

  • Пользователь загружает данные (запрос)
  • Сервер отправляет сообщение в очередь
  • Пользователь отправляет ответ с сообщением о том, что данные были успешно получены и будут обработаны (ответ).

Сообщение, которое было отправлено в очередь, содержит всю необходимую информацию (информацию о пользователе, местоположение файла и т. Пользователь будет уведомлен после обработки данных. Этот подход («забей и забудь») имеет несколько преимуществ:

  • Сервер может обрабатывать другие запросы немедленно
  • Обработка задерживается, если на данный момент нет доступных ресурсов
  • Обработка повторяется, если не удается в первый раз

В приведенном выше примере мы применили модель конкурирующего потребителя. Когда в очереди есть сообщение, его может получить любой из потребителей. Проще говоря, потребители конкурируют друг с другом, чтобы быть получателем сообщений. enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...