Межпроцессное взаимодействие с состоянием для Node.js - PullRequest
4 голосов
/ 14 марта 2012

Я могу упустить очевидный трюк здесь, но ...

В любом случае процессы 2+ node.js могут обмениваться сообщениями с сохранением состояния?В качестве примера: процесс A - это HTTP-сервер, который отправляет входящие внешние http-запросы, для выполнения этих запросов ему необходимо получить информацию от процесса B или C. В настоящее время у меня есть «A», открывающее соединение TCP / IP для каждого запроса к «B 'или' C ', которые прослушивают подходящий порт.

Это кажется совершенно отстойным и много накладных расходов, так как каждый запрос требует много накладных расходов, чтобы открыть сокет и закрыть его, но не открывая сокет для запросаЯ не вижу способа убедиться, что ответ от «B» или «C» связан с правильным HTTP-ответом.

Все процессы находятся в nodejs, B + C имеет длительное время запуска (30+ секунд), поэтому порождение их по запросу не вариант.Все процессы в настоящее время выполняются на одном и том же устройстве (двухъядерном).
С точки зрения протокола, я использую только базовый сервер ' net ', как описано в документации по nodejs и перебрасывающий текст через него.

Любые предложения и т.д. с радостью принимаются

1 Ответ

2 голосов
/ 14 марта 2012

Вы можете передать уникальный идентификатор сеанса (сервер приложений / самостоятельно сгенерированный) как часть ваших сообщений (между процессами A <-> B / C) и, возможно, добавить счетчик к идентификатору сеанса (с разделителем между идентификатор сессии и счетчик) для отслеживания запросов. Счетчик будет увеличиваться при каждом новом запросе. Я уверен, что могут быть лучшие / более простые варианты, которые вы могли бы использовать.

Для межпроцессной передачи сообщений можно посмотреть кеши в памяти (например, redis / memcached и т. Д.) Или использовать серверы обмена сообщениями, такие как ZermoMQ / RabbitMQ и т. Д. (Вы также можете использовать Redis для обмена сообщениями в очереди / пабе) ). Вы также можете отказаться от серверов обмена сообщениями и просто использовать hook.io или net / tcp внутри узла для передачи сообщений.

Надеюсь, это поможет.

...