我们有一个 Web 服务器、一个客户端应用程序和一个与之响应的服务器应用程序。下图描述了结构。
系统是这样工作的:用户在客户端应用程序上更改了一些东西,例如更改一本书的标题。它将向服务器应用程序发送一个 TCP/IP 包。我期望的结果是在网络浏览器中显示的书名应该总是自动更改。据我所知,网络浏览器应该与网络服务器保持一个长轮询请求。我的问题是服务器应用程序如何通知 Web 服务器有关更改?我应该使用什么样的技术?
所有的应用程序都是用 Java 编写的。
我们有一个 Web 服务器、一个客户端应用程序和一个与之响应的服务器应用程序。下图描述了结构。
系统是这样工作的:用户在客户端应用程序上更改了一些东西,例如更改一本书的标题。它将向服务器应用程序发送一个 TCP/IP 包。我期望的结果是在网络浏览器中显示的书名应该总是自动更改。据我所知,网络浏览器应该与网络服务器保持一个长轮询请求。我的问题是服务器应用程序如何通知 Web 服务器有关更改?我应该使用什么样的技术?
所有的应用程序都是用 Java 编写的。
我建议你使用 JMS 队列。当 Web 浏览器转向服务器执行长轮询时,它应该到达连接到队列并调用阻塞receive()
方法的 servlet。当客户端应用程序通知服务器应用程序时。应将适当的消息发送到队列中。此时阻塞receive()
将返回,servlet 将向 Web 浏览器发送更新消息并返回阻塞receive()
状态,直到发送下一个通知。
为避免会话之间的不匹配,您可以使用动态队列或(更好)一个带有可以等于当前会话 ID 的选择器的队列。
消息可以发送到使用 JSON 序列化的 Web 客户端。
“彗星”专为长轮询http请求而设计。有关详细信息,请参阅: http://en.wikipedia.org/wiki/Comet_(programming) 。Comet有一些实现,例如:Nginx + mod_push,你的Server-app发送一个http到Nginx推送一个msg,然后通过nginx发送到浏览器。