В Node.js как мне заставить один сервер вызывать функцию на другом сервере?

#javascript #node.js #ipc #rpc

#javascript #node.js #ipc #rpc

Вопрос:

Допустим, у меня есть 2 веб-сервера. Они оба только что установлены Node.js и запускает веб-сайт (используя Express). Довольно простой материал.

Как Сервер-A может сообщить серверу-B выполнить функцию? (внутри node.js )

Preferably…is для этого есть модуль npm, который действительно упрощает для меня?

Ответ №1:

Как Сервер-A может сообщить серверу-B выполнить функцию?

Вы можете использовать один из модулей RPC, например dnode.

Комментарии:

1. Разве я не могу просто использовать HTTP REST? (базовый post/ get)

2. @Owalla: Да, вы можете, но вам нужно будет привязать свой интерфейс REST и вызовы к определенному API в вашем node.js программы. Такие модули, как dnode, экономят ваше время и код, потому что они абстрагируют его для вас. Вы также можете использовать стандартный сетевой модуль и сокеты, если это только обмен данными между серверами, но это также требует написания большего количества кода, чем использование библиотек RPC.

3. С точки зрения масштабирования, не лучше ли использовать http? Я думаю, это позволило бы проще развертывать разные серверы в разных экземплярах. PS: — Я не очень хорошо разбираюсь в модулях RPC.

Ответ №2:

Ознакомьтесь с Wildcard API, это реализация RPC для JavaScript.

Это работает между браузером и Node.js сервер, а также работает между несколькими Node.js процессы:

 // Node.js process 1

const express = require('express');
const wildcardMiddleware = require('@wildcard-api/server/express');
const {endpoints} = require('@wildcard-api/server');

endpoints.hello = async function() {
  const msg = 'Hello from process 1';
  return msg;
};

const app = express();
app.use(wildcardMiddleware());

app.listen(3000);
  
 // Node.js process 2

const wildcard = require('@wildcard-api/client');
const {endpoints} = require('@wildcard-api/client');

wildcard.serverUrl = 'http://localhost:3000';

(async () => {
  const msg = await endpoints.hello();
  console.log(msg); // Prints "Hello from process 1"
})();
  

Вы можете просмотреть код примера здесь.

Ответ №3:

Скорее всего, вам нужно что-то вроде модуля JSON-RPC для Node. После некоторого быстрого поиска, вот модуль промежуточного программного обеспечения JSON-RPC для Connect, который был бы идеальным для использования с Express.

Кроме того, этот тоже выглядит многообещающим.

Комментарии:

1. JSON-промежуточное программное обеспечение RPC … первая ссылка … это в основном HTTP REST, верно?

2. JSON-RPC не обязательно должен выполняться через HTTP. Это также не совсем RESTful, потому что при использовании HTTP единственным типом запроса является GET . JSON-RPC — это стандарт для отправки удаленных вызовов процедур (RPC), аналогичный XML-RPC. Подробнее: en.wikipedia.org/wiki/JSON-RPC

Ответ №4:

Обновление: библиотека, которую я создал и на которую ссылался ниже, в настоящее время не поддерживается. Пожалуйста, ознакомьтесь с другими ответами в этой теме.


То, что вам нужно, называется RPC. Можно создать свой собственный, но в зависимости от необходимых вам функций это может занять много времени.

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

Вот оно https://github.com/DhavalW/octopus.