在Node.js中,如何让一台服务器在另一台服务器上调用一个函数?

时间:2011-05-12 04:18:26

标签: javascript node.js ipc rpc

假设我有2台网络服务器。他们俩都安装了Node.js并运行了一个网站(使用Express)。非常基本的东西。

Server-A如何告诉Server-B执行某个功能? (在node.js内)

最好......有一个npm模块,这对我来说真的很容易吗?

4 个答案:

答案 0 :(得分:8)

签出Wildcard API,它是JavaScript的RPC实现。

它可以在浏览器和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"
})();

您可以浏览示例here的代码。

答案 1 :(得分:6)

  

Server-A如何告诉Server-B   执行一个函数?

您可以使用其中一个RPC模块,例如dnode

答案 2 :(得分:2)

您最有可能想要类似于Node的JSON-RPC模块。经过一些快速搜索,here是一个适用于Connect的JSON-RPC中间件模块,非常适合与Express一起使用。

此外,this看起来也很有希望。

答案 3 :(得分:0)

您需要的是RPC。可以自己构建,但是根据所需的功能,可能会很耗时。

鉴于我必须投入的时间,我建议您找到一个适合您目的的体面的图书馆,而不是徒劳。我的用例需要其他复杂的功能,例如选择性RPC调用,对此我找不到足够轻量的东西,因此必须自己动手。

这里是https://github.com/DhavalW/octopus

现在设置起来非常容易,并且可以在不修改的情况下使用socket.io,websockets,子进程等一堆常见的传输方式。除了重命名功能(正在开发中)外,大多数使用安全。