Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
双向Java客户机/服务器通信_Java_Sockets_Communication_Distributed - Fatal编程技术网

双向Java客户机/服务器通信

双向Java客户机/服务器通信,java,sockets,communication,distributed,Java,Sockets,Communication,Distributed,我正在尝试用Java设计一个分布式应用程序,其中包含一些服务器和一些管理器(应用程序监视和配置服务器)。服务器和管理器之间的大部分流量都是管理器向服务器发出的请求,但是服务器应该能够在发生某些事情时通知管理器。管理者不关心彼此,服务器也不关心彼此,但是管理者应该管理所有正在运行的服务器,服务器应该由所有正在运行的管理者管理。 我不想让每个请求都通过一个中心实体 实现这两者之间通信链接的最佳方式是什么 我的想法是: RESTfulAPI:单向通信,因此我们需要轮询,轮询响应性较差,浪费大量资源

我正在尝试用Java设计一个分布式应用程序,其中包含一些服务器和一些管理器(应用程序监视和配置服务器)。服务器和管理器之间的大部分流量都是管理器向服务器发出的请求,但是服务器应该能够在发生某些事情时通知管理器。管理者不关心彼此,服务器也不关心彼此,但是管理者应该管理所有正在运行的服务器,服务器应该由所有正在运行的管理者管理。 我不想让每个请求都通过一个中心实体

实现这两者之间通信链接的最佳方式是什么

我的想法是:

  • RESTfulAPI:单向通信,因此我们需要轮询,轮询响应性较差,浪费大量资源

  • 在每对服务器/管理器之间打开一个套接字:对我来说似乎是最好的方式,但我觉得我会重新发明轮子

  • JavaRMI:看起来不错,但它需要一个中心实体(rmiregistry)。另外,如果我使用Java,我会被它困住,而且它看起来更适合点对点通信

  • JMS:同样,它需要一个中心实体(JMS提供程序),而且它只支持Java


谢谢

查看AMPQ/RabbitMQ

  • RabbitMQ可以集群化-请参阅
  • 它具有大多数编程语言的绑定

  • 而且它非常快速、可扩展和稳定

    JMS代理仅限于Java,但客户端几乎可以是任何东西

    如果您不想要一个中心实体,您可以为每台服务器配备一个嵌入式代理或专用代理

    我会使用ActiveMQ,因为它是最容易入门的(而且速度很快)