【问题标题】:What is the best way to communicate between two servers?在两台服务器之间进行通信的最佳方式是什么?
【发布时间】:2015-07-13 17:17:36
【问题描述】:

我正在构建一个包含两个部分的网络应用程序。一方面它使用服务器和客户端之间的实时连接,另一方面它执行一些 cpu 密集型任务以提供相关数据。

在nodejs中实现实时通信,在python/java中实现cpu密集部分。 nodejs 服务器可以参与与其他服务器的双工通信的最佳方式是什么?

【问题讨论】:

  • 节点和python部分之间的通信是否也是实时的,或者可以使用更松散耦合的方法来实现

标签: node.js server communication


【解决方案1】:

对于基本解决方案,您可以使用Socket.IO,如果您已经在使用它并且知道它是如何工作的,它将完成工作,因为它允许客户端和服务器之间的通信,其中客户端可以是不同的服务器不同的语言。

如果您想要一个具有更多选项和控件的更强大的解决方案,或者可以处理更高的流量吞吐量(尽管如果您最终只是通过相对较慢的互联网发送它,这应该不是问题),您可以查看类似ØMQ (ZeroMQ)。它是一个消息队列,除了请求-响应之外,它还为您提供更多控制和许多不同的通信方法。

当您进行设置时,我建议您将 CPU 密集型服务器用作稳定端(服务器),并将您的 Web 服务器用作您的客户端。假设您将单个服务器用于 CPU 密集型任务,并且您正在运行多个 NodeJS 服务器实例以利用 Web 服务器的多核。这简化了您的通信,因为您希望有一个单点连接。

如果您预见需要多个 CPU 服务器,您将需要设置一个可以在多个 Web 服务器和多个 CPU 服务器之间路由的路由服务器,在这种情况下,我建议您学习 ØMQ 的额外工作。

【讨论】:

  • 你有什么好的教程或开源实现可以让我更好地学习这个吗?或者只是 rtfm ?
【解决方案2】:

您可以使用提供的 http.request 方法在节点代码中发出 curl 请求。 http.request 方法也用于实现 Authentication api。 您可以将回调放在请求成功中,当您在节点中获取响应数据时,您可以将其发送回用户。 而在后台 java/python 服务器可以利用节点的 CPU 密集型任务请求。

【讨论】:

    【解决方案3】:

    我维护一个 node.js 应用程序,该应用程序在分布在 2 个服务器上的 34 个任务之间相互通信。

    在您的情况下,对于 Web 服务器和应用服务器之间的通信,您可以考虑使用 mqtt。

    我使用 mqtt 进行这种通信。大多数语言都有 mqtt 客户端,包括 node/javascript、python 和 java。在我的情况下,我使用 mqtt 'topics' 发布 json 消息,并且任何已注册订阅'topic' 的任务在发布时都会收到它的数据。如果你用谷歌搜索“pub sub”、“mqtt”和“mosquitto”,你会发现很多参考资料和例子。 Mosquitto(现在是一个 Eclipse 项目)只是众多可用的 mqtt 代理之一。另一个用 Java 编写的非常好的代理叫做 hivemq。

    这是一个非常简单、可靠且可扩展的解决方案。在我的例子中,每天有数百万条消息可靠地通过 mqtt。

    【讨论】:

    • 你的代码是开源的吗?我想看看它或任何好的教程。谢谢
    【解决方案4】:

    你一定在找socketio

    Socket.IO 支持基于事件的实时双向通信。 它适用于所有平台、浏览器或设备,同样注重可靠性和速度。

    传统上,套接字一直是大多数人所采用的解决方案 实时系统架构,提供双向 客户端和服务器之间的通信通道。

    【讨论】:

      猜你喜欢
      • 2013-01-02
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 2018-05-24
      • 2016-09-04
      相关资源
      最近更新 更多