#javascript #node.js #ipc #rpc
#javascript #node.js #ipc #rpc
Вопрос:
Допустим, у меня есть 2 веб-сервера. Они оба только что установлены Node.js и запускает веб-сайт (используя Express). Довольно простой материал.
Как Сервер-A может сообщить серверу-B выполнить функцию? (внутри node.js )
Preferably…is для этого есть модуль npm, который действительно упрощает для меня?
Ответ №1:
Как Сервер-A может сообщить серверу-B выполнить функцию?
Комментарии:
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.