【问题标题】:In Node.js, how do I make one server call a function on another server?在 Node.js 中,如何让一台服务器调用另一台服务器上的函数?
【发布时间】:2011-08-23 19:32:58
【问题描述】:

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

Server-A 如何告诉 Server-B 执行一个函数? (在 node.js 中)

最好...是否有一个 npm 模块可以让我很容易做到这一点?

【问题讨论】:

    标签: javascript node.js ipc rpc


    【解决方案1】:

    更新:我在下面创建和链接的库目前未维护。请查看此线程上的其他答案。


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

    鉴于我必须投入大量时间,我建议您找到一个适合您目的的体面库,而不是手动滚动。我的用例需要额外的复杂功能,例如选择性 RPC 调用,但我找不到足够轻量级的功能,所以我不得不自己动手。

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

    【讨论】:

      【解决方案2】:

      查看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

      【讨论】:

        【解决方案3】:

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

        您可以使用RPC 模块之一,例如dnode

        【讨论】:

        • 我不能只使用 HTTP REST 吗? (基本发布/获取)
        • @Owalla:是的,您可以,但是您需要绑定您的 REST 接口并调用 node.js 程序中的某些 API。像 dnode 这样的模块可以节省您的时间和代码,因为它们为您抽象了它。如果只是服务器到服务器的通信,你也可以使用标准的网络模块和套接字,但这也需要编写比使用 RPC 库更多的代码。
        • 在扩展方面,使用http不是更好吗?我猜这将允许更容易地将不同的服务器部署到不同的实例。 PS:- 我不太了解 RPC 模块。
        【解决方案4】:

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

        另外,this 看起来也很有前途。

        【讨论】:

        • JSON-RPC 中间件...第一个链接...基本上就是 HTTP REST 吧?
        • JSON-RPC 不必通过 HTTP。它也不完全是 RESTful,因为在使用 HTTP 时,唯一的请求类型是 GET。 JSON-RPC 是一种类似于 XML-RPC 的发送远程过程调用 (RPC) 的标准。阅读更多:en.wikipedia.org/wiki/JSON-RPC
        猜你喜欢
        • 1970-01-01
        • 2016-10-28
        • 2020-11-26
        • 1970-01-01
        • 1970-01-01
        • 2014-08-03
        • 2011-03-18
        • 1970-01-01
        • 2017-01-23
        相关资源
        最近更新 更多