JAVA从服务器推送到客户端

时间:2012-03-27 21:34:41

标签: java client-server push duplex

我希望客户端能够无延迟地通过服务器相互查询(=没有轮询间隔)。

示例:服务器S,客户端A和B

客户A想要请求客户B. 客户端A将向服务器S发出请求,没问题。 然后,服务器S需要能够请求客户端B,但如何在没有轮询的情况下执行此操作?

所有node.js / APE(适用于PHP)技术都是为Web设计的,但我没有使用Web服务器。 Java是否有接近推送技术/框架的东西,而不是网络?

我真的更喜欢不需要每个客户端使用自己的保留端口的解决方案(例如,我不希望每个客户端最终使用1个WebService)

注意:所有客户都在同一台机器上。

3 个答案:

答案 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服务器。