JAVA从服务器推送到客户端

Posted

技术标签:

【中文标题】JAVA从服务器推送到客户端【英文标题】:JAVA push from server to clients 【发布时间】:2012-04-11 11:42:24 【问题描述】:

我想让客户端通过服务器毫无延迟地相互查询(= 没有轮询间隔)。

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

客户端 A 想要请求客户端 B。 客户端 A 将向服务器 S 发出请求,那里没有问题。 那么服务器 S 需要能够请求客户端 B 但如何在不轮询的情况下做到这一点?

所有 node.js/APE(用于 php)技术都是为 Web 设计的,但是我不为此使用 Web 服务器。 Java 是否有类似于非 Web 的推送技术/框架?

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

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

【问题讨论】:

您的客户实际上是守护进程吗?换句话说,它们总是在服务器上运行吗? 是的,我想你可以这么说。 【参考方案1】:

几个选项...

普通套接字通信。 java.net.Socket,java.net.ServerSocket。最大的灵活性,但需要了解底层 TCP/IP API/概念。

不错的旧 RMI。 TCP/IP 之上的基于 Java 的 RPC 层。当客户端和服务器都在 Java 中并且通常在同一子网中时效果很好。当客户端和/或服务器被 natted 时可能会出现问题。

Spring Remoting,其实还不错。

双向 Web 服务。即客户端托管自己的 WSes,服务器在需要回调时调用这些 WSes。

有人已经提到过 JMS。

分布式数据结构,查看http://www.hazelcast.com/

很多选项可供选择,无需网络服务器。

【讨论】:

- 普通套接字通信:我要求一个框架的原因是很难在套接字级别工作的远程对象上调用远程方法。 - RMI / WS:他们需要让每个客户端使用预定义的 TCP 端口,这不是一个选项(我会更新问题,对此感到抱歉) - 我认为 JMS 仍然是对请求的延迟处理我会检查你的最后一个链接,谢谢! 您可以使用 Endpoint.publis(*) API 以编程方式在运行时确定的端口上启动 WS,然后调用服务器上的 WS,让服务器知道此端点 URL。这样客户端就不需要使用预定义的端口了。 TCP 推送技术的伟大之处在于您将为服务器使用单个 TCP 端口,然后在客户端您将使用“动态端口范围”内的端口,并且确保您永远不会与机器上的任何东西发生冲突!我想知道是否有可能获取和使用这样一个临时端口,或者这些端口是否严格保留给 TCP 协议。 Spring 远程处理只是对其他现有远程访问协议的封装。只有支持某种消息传递的协议上的包装器实际上才适用于用例,例如通过 JMS。大多数实际上是基于请求/响应的。 @BhaskarKarambelkar 我想要实现的是我有一个在客户端显示记录的 jsp 页面,如果服务器得到更新,它应该反映回客户端而不刷新客户端页面(服务器应该推送数据到客户端)使用JAVA技术。请帮助我【参考方案2】:

如果您真的不想使用 Web 服务器,那么我会查看 JMS。话虽如此,由于协议无处不在,这些天所有酷孩子都在使用网络服务器。

【讨论】:

好的,假设服务器是托管 Web 服务的 Web 服务器。那么他如何推送给客户端呢?(那里没有 javascript,所以没有 ajax 或 node.js 等)【参考方案3】:

您的用例需要消息传递协议。我们真的不知道您的问题的范围,但您已经说过您希望服务器在客户端之间交换请求,所以我会采用现有的解决方案,而不是自己的方法。

已经提到了 JMS,它肯定是一个可行的基于 Java 的解决方案,另一个是 XMPP,它是一种常用于即时消息传递的实时通信协议。

它是一个开放标准,在每种主要语言和平台上都支持服务器和客户端。这将允许您拥有独立的应用程序、基于 Web 的应用程序和用于移动设备的应用程序,它们都能够相互通信。您的用例的唯一潜在问题是它是基于文本的。由于您还没有说要来回传递什么请求,所以我不知道这是否符合您的要求。

您可以使用Smack 在 Java 和您想要的任何操作系统服务器中进行客户端开发。

【讨论】:

以上是关于JAVA从服务器推送到客户端的主要内容,如果未能解决你的问题,请参考以下文章

JAVA从服务器推送到客户端

将新数据从 Node REST API 推送到 React-Native

iPhone上的COMET(服务器推送到客户端)[关闭]

播放 WebSockets 服务器推送示例

如何将 Reactjs 日志和指标推送到 Grafana

要从 MobileFirst 服务器推送到移动设备的加密推送通知消息