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

时间:2010-12-22 20:27:05

标签: java google-app-engine sockets servlets applet

我需要知道的最佳(最快)的方法有一个服务器(优选地基于一个一个PHP,但一个jsp / servlet的人们可以使用谷歌应用程序引擎被设置为孔)通知几个Java小程序/应用程序的改变发生了数据。

我想象这个工作的方式将与我认为在线java游戏(如Runescape)的工作方式非常相似 用户1 :更改服务器上的数据 服务器:向用户1返回成功,通知连接的计算机更改 已连接的计算机1 :进程更改,将成功返回给服务器 已连接的计算机2 :进程更改,将成功返回给服务器 已连接的计算机3 :进程更改,将成功返回给服务器 已连接的计算机4 :进程更改,将成功返回给服务器。

我希望整个过程在半秒内完成,并且不涉及轮询,因为将会有很长的时间没有任何事情,接着是突然发生的事件,其中4个事件连续发生。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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