通知多个 Java 小程序/应用程序服务器上发生更改的最佳方法

Posted

技术标签:

【中文标题】通知多个 Java 小程序/应用程序服务器上发生更改的最佳方法【英文标题】:Best way to notify several java applets/applications of a change on a server 【发布时间】:2010-12-22 20:27:05 【问题描述】:

我需要知道拥有服务器的最佳(最快)方式(最好是基于 php 的服务器,但也可以使用 google app 引擎设置 jsp/servlet)通知几个 java 小程序/应用程序发生更改发生在数据上。

我所设想的工作方式与我认为在线 Java 游戏(如 Runescape)的工作方式非常相似用户 1:更改服务器上的数据。服务器:向用户 1 返回成功,通知已连接的计算机更改。已连接的计算机 1:处理更改,向服务器返回成功。已连接计算机 2:进程更改,向服务器返回成功。已连接计算机 3:进程更改,向服务器返回成功。已连接计算机 4 em>:处理变化,向服务器返回成功。

我希望整个过程在半秒内完成,并且不涉及轮询,因为会有很长一段时间什么都没有,然后是一个突然发生 4 个事件的瞬间。

【问题讨论】:

这是浏览器客户端吗?看看这是否有帮助***.com/questions/1285150/… @pangea 是的,它也经过数字签名并作为 .jar 运行,因此它以与标准 java 应用程序相同的权限运行。该链接看起来非常有用,我一定会检查一下。 【参考方案1】:

如果它必须非常快速和可靠,我根本不会使用网络服务器。我有一个独立的服务器进程,并让客户端直接与它建立 TCP 连接。更多应用程序使用来自 Web 服务器的推送,但我仍然觉得它非常不可靠。每个客户端都需要一个阻塞套接字读取的线程。当数据到达客户端系统时,他们会立即获取数据。

【讨论】:

经过一番研究,我不得不同意,没有什么可以与套接字连接竞争。谢谢 JOTN :) 同意,如果您可以灵活地走这条路,那么您遇到的问题最少。大多数 java web 服务器默认将 http 服务器限制为 5 个线程,这可以更改,但正如 JOTN 指出的那样,每个客户端都会有一个阻塞线程,但是您也会为每个套接字阻塞线程以进行读取,所以它权衡。【参考方案2】:

查看 ICEPush 以了解 Java 实现。我能够找到 2 篇演示如何在 PHP 中实现类似的帖子。两篇文章都展示了一个 AJAX 客户端,但是您可以将其反向工程为 Java 小程序中的简单 HTTP 请求。本质上,所有这些引擎所做的都是让客户端与服务器保持一个挂起的 HTTP 请求,当服务器有客户端的信息时返回该请求。基本上,客户端向服务器发出请求,如果服务器在队列中没有该客户端的事件,它只会保留请求并休眠,直到有通知添加到队列或达到超时服务器在哪一点返回请求,客户端对其进行解析,此时它立即向服务器发出另一个请求,并且该过程重新开始。 ICEPush 示例的超时时间不到 60 秒。

http://www.zeitoun.net/articles/comet_and_php/start http://www.webreference.com/programming/javascript/rg28/index.html

【讨论】:

以上是关于通知多个 Java 小程序/应用程序服务器上发生更改的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

为啥任务取消发生在调用者线程上?

Java实现微信小程序发送服务通知

在Android中处理多个推送通知点击

多个服务器上的单个 SSL 证书以将推送通知发送到同一应用程序

Web 应用程序如何推送通知(java/servlet)?

Java编程基础-面向对象(上)