我们有一个Web服务器,一个客户端应用程序和一个响应它的服务器应用程序。下图描述了结构。
系统的工作方式如下:用户更改客户端应用程序上的某些内容,例如更改书籍的标题。它将TCP / IP包发送到服务器应用程序。我期望的结果是,应始终自动更改Web浏览器中显示的书名。据我所知,Web浏览器应该与Web服务器保持Long-Polling请求。我的问题是服务器应用程序如何通知Web服务器有关更改?我应该使用什么样的技术?
所有应用程序都是用Java编写的。
答案 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发送到浏览器。