如何通知Web服务器响应长轮询?

时间:2012-08-26 15:13:39

标签: java java-ee

我们有一个Web服务器,一个客户端应用程序和一个响应它的服务器应用程序。下图描述了结构。

enter image description here

系统的工作方式如下:用户更改客户端应用程序上的某些内容,例如更改书籍的标题。它将TCP / IP包发送到服务器应用程序。我期望的结果是,应始终自动更改Web浏览器中显示的书名。据我所知,Web浏览器应该与Web服务器保持Long-Polling请求。我的问题是服务器应用程序如何通知Web服务器有关更改?我应该使用什么样的技术?

所有应用程序都是用Java编写的。

2 个答案:

答案 0 :(得分:1)

我建议你使用JMS队列。当Web浏览器转向服务器以执行长轮询时,它应该到达连接到队列的servlet并调用阻塞receive()方法。 客户端应用程序通知服务器应用程序应将适当的消息发送到队列中。此时阻塞receive()将返回,servlet将向Web浏览器发送更新消息并返回阻止receive(),直到将发送下一个通知。

为了避免会话之间的不匹配,您可以使用动态队列或(更好)一个带有选择器的队列,该队列可以等于当前会话ID。

可以使用JSON将消息发送到序列化的Web客户端。

答案 1 :(得分:0)

“Comet”专为长轮询http请求而设计。有关详细信息,请参阅:http://en.wikipedia.org/wiki/Comet_(programming)。 有一些Comet的工具,例如:Nginx + mod_push,你的服务器应用程序发送一个http到Nginx推送一个消息,然后由nginx发送到浏览器。