两台服务器之间通信的最佳方式是什么?
What is the best way to communicate between two servers?
我正在构建一个包含两个部分的网络应用程序。一方面,它使用服务器和客户端之间的实时连接,另一方面,它执行一些 cpu 密集型任务以提供相关数据。
在nodejs中实现实时通信,cpu密集部分在python/java中实现。 nodejs 服务器可以参与与其他服务器的双工通信的最佳方式是什么?
您一定在寻找 socketio
Socket.IO enables real-time bidirectional event-based communication.
It works on every platform, browser or device, focusing equally on reliability and speed.
Sockets have traditionally been the solution around which most
realtime systems are architected, providing a bi-directional
communication channel between a client and a server.
您可以使用提供的 http.request 方法在节点代码中发出 curl 请求。
http.request 方法也用于实现身份验证 api。
您可以将回调放在请求成功时,当您在节点中获得响应数据时,您可以将其发送回用户。
在后台 java/python 服务器可以利用节点的请求进行 CPU 密集型任务。
我维护一个 node.js 应用程序,它在分布在 2 个服务器上的 34 个任务之间相互通信。
对于您的情况,对于 Web 服务器和应用程序服务器之间的通信,您可以考虑使用 mqtt。
我使用 mqtt 进行这种通信。大多数语言都有 mqtt 客户端,包括 node/javascript、python 和 java。在我的例子中,我使用 mqtt 'topics' 发布 json 消息,任何已注册订阅 'topic' 的任务都会在发布时收到它的数据。如果您 google "pub sub"、"mqtt" 和 "mosquitto",您会发现很多参考资料和示例。 Mosquitto(现在是一个 Eclipse 项目)只是众多可用的 mqtt 代理之一。另一个用 Java 编写的非常好的代理称为 hivemq。
这是一个非常简单、可靠的解决方案,可以很好地扩展。在我的例子中,每天有数百万条消息可靠地通过 mqtt。
对于基本解决方案,您可以使用 Socket.IO 如果您已经在使用它并且知道它是如何工作的,它将完成工作,因为它允许客户端和服务器之间的通信,客户端可以使用不同语言的不同服务器。
如果您想要一个具有更多选项和控件的更强大的解决方案,或者它可以处理更高的流量吞吐量(尽管如果您最终只是通过相对较慢的互联网发送它,这应该不是问题),您可以查看类似于 ØMQ (ZeroMQ)。它是一个消息队列,除了请求-响应之外,它还为您提供更多控制和许多不同的通信方法。
当您设置任何一个时,我建议使用您的 CPU 密集型服务器作为稳定端(服务器),并将您的网络服务器作为您的客户端。假设您使用单个服务器来执行 CPU 密集型任务,并且您有 运行 多个 NodeJS 服务器实例以利用 Web 服务器的多核优势。这简化了您的通信,因为您希望有一个连接点。
如果您预见需要多个 CPU 服务器,您将需要设置一个路由服务器,该服务器可以在多个 Web 服务器和多个 CPU 服务器之间进行路由,在这种情况下,我会推荐额外的工作学习 ØMQ.
我正在构建一个包含两个部分的网络应用程序。一方面,它使用服务器和客户端之间的实时连接,另一方面,它执行一些 cpu 密集型任务以提供相关数据。
在nodejs中实现实时通信,cpu密集部分在python/java中实现。 nodejs 服务器可以参与与其他服务器的双工通信的最佳方式是什么?
您一定在寻找 socketio
Socket.IO enables real-time bidirectional event-based communication. It works on every platform, browser or device, focusing equally on reliability and speed.
Sockets have traditionally been the solution around which most realtime systems are architected, providing a bi-directional communication channel between a client and a server.
您可以使用提供的 http.request 方法在节点代码中发出 curl 请求。 http.request 方法也用于实现身份验证 api。 您可以将回调放在请求成功时,当您在节点中获得响应数据时,您可以将其发送回用户。 在后台 java/python 服务器可以利用节点的请求进行 CPU 密集型任务。
我维护一个 node.js 应用程序,它在分布在 2 个服务器上的 34 个任务之间相互通信。
对于您的情况,对于 Web 服务器和应用程序服务器之间的通信,您可以考虑使用 mqtt。
我使用 mqtt 进行这种通信。大多数语言都有 mqtt 客户端,包括 node/javascript、python 和 java。在我的例子中,我使用 mqtt 'topics' 发布 json 消息,任何已注册订阅 'topic' 的任务都会在发布时收到它的数据。如果您 google "pub sub"、"mqtt" 和 "mosquitto",您会发现很多参考资料和示例。 Mosquitto(现在是一个 Eclipse 项目)只是众多可用的 mqtt 代理之一。另一个用 Java 编写的非常好的代理称为 hivemq。
这是一个非常简单、可靠的解决方案,可以很好地扩展。在我的例子中,每天有数百万条消息可靠地通过 mqtt。
对于基本解决方案,您可以使用 Socket.IO 如果您已经在使用它并且知道它是如何工作的,它将完成工作,因为它允许客户端和服务器之间的通信,客户端可以使用不同语言的不同服务器。
如果您想要一个具有更多选项和控件的更强大的解决方案,或者它可以处理更高的流量吞吐量(尽管如果您最终只是通过相对较慢的互联网发送它,这应该不是问题),您可以查看类似于 ØMQ (ZeroMQ)。它是一个消息队列,除了请求-响应之外,它还为您提供更多控制和许多不同的通信方法。
当您设置任何一个时,我建议使用您的 CPU 密集型服务器作为稳定端(服务器),并将您的网络服务器作为您的客户端。假设您使用单个服务器来执行 CPU 密集型任务,并且您有 运行 多个 NodeJS 服务器实例以利用 Web 服务器的多核优势。这简化了您的通信,因为您希望有一个连接点。
如果您预见需要多个 CPU 服务器,您将需要设置一个路由服务器,该服务器可以在多个 Web 服务器和多个 CPU 服务器之间进行路由,在这种情况下,我会推荐额外的工作学习 ØMQ.