两台服务器之间通信的最佳方式是什么?

我正在构build一个包含两个部分的Web应用程序。 其中一部分使用服务器和客户端之间的实时连接,另一部分使用一些cpu密集型任务来提供相关的数据。

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

对于一个基本的解决scheme,如果你已经在使用Socket.IO并且知道它是如何工作的,那么你可以使用Socket.IO ,因为它允许客户端和服务器之间的通信,客户端可以是不同的服务器, 。

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

当你设置,我会build议使用你的CPU密集型服务器作为稳定的一端(服务器)和你的networking服务器作为你的客户端。 假设您正在使用单个服务器执行CPU密集型任务,并且正在运行多个NodeJS服务器实例以利用您的Web服务器的多核。 这样可以简化您的沟通,因为您希望单点连接。

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

您可以使用提供的http.request方法在节点的代码中进行curl请求。 http.request方法也用于实现Authentication api。 你可以把你的callback放在请求成功的地方,当你得到响应数据的时候,你可以把它发回给用户。 而在backgrount中,java / python服务器可以利用节点对CPU密集型任务的请求。

我维护一个node.js应用程序,它可以跨2个服务器分布在34个任务之间。

在你的情况下,对于Web服务器和应用程序服务器之间的通信,你可能会考虑mqtt。

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

这是一个非常简单,可靠的解决scheme。 在我的情况下,每天几百万条消息可靠地通过mqtt。

你一定在找socketio

Socket.IO支持基于事件的实时双向通信。 它可以在任何平台,浏览器或设备上工作,同时关注可靠性和速度。

传统上,套接字一直是大多数实时系统架构的解决scheme,提供了客户端与服务器之间的双向通信通道。