Java Web服务和服务器->客户端通知

Java Web服务和服务器->客户端通知,java,web-services,asynchronous,Java,Web Services,Asynchronous,对于web服务应用程序,我希望服务器能够通知客户端一些事件。当客户机启动时,他调用其中一个WS方法来获取它需要的一些信息。然后,存储此信息的服务器会持续侦听这些信息的更改,如果有更改,它会通知相关客户端 我不知道web服务是否能很好地解决我的问题?我不知道它在TCP连接方面是如何工作的,因为服务器可能会在很长一段时间后通知客户端 解决此类问题的最佳体系结构是什么 谢谢 编辑:我看过一些建议使用Comet的讨论,但如果您认为有更简单、更方便的解决方案,请告诉我。因为我是从零开始这个项目的,所以我没

对于web服务应用程序,我希望服务器能够通知客户端一些事件。当客户机启动时,他调用其中一个WS方法来获取它需要的一些信息。然后,存储此信息的服务器会持续侦听这些信息的更改,如果有更改,它会通知相关客户端

我不知道web服务是否能很好地解决我的问题?我不知道它在TCP连接方面是如何工作的,因为服务器可能会在很长一段时间后通知客户端

解决此类问题的最佳体系结构是什么

谢谢

编辑:我看过一些建议使用Comet的讨论,但如果您认为有更简单、更方便的解决方案,请告诉我。因为我是从零开始这个项目的,所以我没有任何限制

我还可以使用轮询模型,其中客户端定期轮询服务器以获取所需的信息,但我需要考虑此模型可能在服务器上产生的负载。我不知道当有很多客户端时,web服务是否能够支持这样的负载


我还研究了Servlet 3.0提供的异步功能,但我不知道它如何解决我的问题。

没有轮询:套接字

对于轮询和Web服务:您应该使用ETAGHTML


当客户机轮询时,他发送一个带有etag的请求。webservice以200ok和数据或304NotModified响应。304没有body=>更少的流量

您可以在客户端上实现回调方法,而不是客户端轮询服务器,这样当服务器想要向客户端发布某些更改时,服务器可以使用客户端提供的回调方法。

我可以使用web服务解决方案想出以下两种方法之一:

回调:当客户端调用服务器时,它会留下回拨url和id,比如相关id。当服务器想要回复客户端时,它只会使用回拨url来通知。服务器可以使用多种方法异步处理请求。为此,您的客户机不需要是Web服务,但它应该能够接受回调请求。它可以是servlet等

轮询:当客户端向服务器发出请求时,它会收到一个id,比如requestid。在指定的时间间隔之后,客户端使用此请求id轮询服务器以获取响应。需要基于处理时间的合理超时和轮询间隔


你需要支持IE吗?否则,您是否查看了服务器发送的事件?为了通过回调方法接收服务器通知,我是否需要我的客户机也具有web服务?如果是,我认为这是一个复杂的解决方案,因为它现在涉及两个web服务,一个在服务器端,另一个在客户端。