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

时间:2012-08-20 08:21:39

标签: java web-services asynchronous

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

我不知道网络服务是否是解决我问题的好方法?我不知道它如何与TCP连接有关,因为服务器可能会在很长一段时间后通知客户端。

解决此类问题的最佳架构是什么?

由于


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

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

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

3 个答案:

答案 0 :(得分:0)

没有轮询:套接字

使用轮询和网络服务:你应该使用etag(html)。

当客户轮询时,他发送带有etag的请求。 webservice以200(ok)和数据或304(未修改)响应。 304没有body =>交通不那么

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我可以使用Web服务解决方案考虑以下两种方法之一:

  1. 回调:当客户端调用服务器时,它会将其回调url和一个id(即相关ID)保留。当服务器想要回复客户端时,它只会使用回调URL来通知。服务器可以使用各种方法异步处理请求。您的客户端不需要是Web服务,但它应该能够接受请求(回调)。它可以是一个servlet等。

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