1

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

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

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

谢谢


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

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

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

4

3 回答 3

0

Without polling: sockets

With polling and webservices: u should use etag (html).

When a client polls he sends a request with an etag. webservice responds either with 200(ok) and data or 304(not modified). 304 has no body => less trafic

于 2012-08-20T11:35:50.420 回答
0

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

于 2012-08-20T11:44:52.350 回答
0

我可以想到以下两种使用 Web 服务解决方案的方法之一:

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

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

于 2012-08-24T17:51:42.960 回答