我希望客户端能够无延迟地通过服务器相互查询(=没有轮询间隔)。
示例:服务器S,客户端A和B
客户A想要请求客户B. 客户端A将向服务器S发出请求,没问题。 然后,服务器S需要能够请求客户端B,但如何在没有轮询的情况下执行此操作?
所有node.js / APE(适用于PHP)技术都是为Web设计的,但我没有使用Web服务器。 Java是否有接近推送技术/框架的东西,而不是网络?
我真的更喜欢不需要每个客户端使用自己的保留端口的解决方案(例如,我不希望每个客户端最终使用1个WebService)
注意:所有客户都在同一台机器上。
答案 0 :(得分:5)
有几种选择......
普通套接字通信。 java.net.Socket,java.net.ServerSocket。最大的灵活性,但需要了解低级TCP / IP API /概念。
好老的RMI。基于Java的RPC层位于TCP / IP之上。当客户端和服务器都在Java中并且通常位于同一子网中时,工作正常。当客户端和/或服务器出现问题时可能会出现问题。
Spring Remoting,它实际上相当不错。
双向Web服务。即客户端托管自己的WSes,服务器在需要进行回调时调用它们。
JMS已经提到过。
分布式数据结构,请查看http://www.hazelcast.com/
可供选择的众多选项,无需网络服务器。
答案 1 :(得分:3)
如果你真的不想使用网络服务器,那么我会查看JMS。话虽如此,所以很酷的孩子们现在都在使用网络服务器,因为这些协议无处不在。
答案 2 :(得分:0)
您的用例需要消息传递协议。我们并不真正知道您的问题的范围,但您已经说过您希望服务器在客户端之间交换请求,因此我会使用现有的解决方案而不是自己的方法。
JMS已被提及,当然是一种可行的基于Java的解决方案,另一种是XMPP,它是一种常用于即时消息的实时通信协议。
这是一个开放标准,在每种主要语言和平台上都支持服务器和客户端。这将允许您拥有独立的应用程序,基于Web的应用程序和移动设备的应用程序,所有这些应用程序都可以相互通信。您的用例唯一可能的问题是它是基于文本的。既然你还没有说出你想要来回传递的要求,我不知道这是否适合你的账单。
您可以使用Smack进行Java中的客户端开发以及您想要的任何OS服务器。