1

我正在尝试找到以下问题的解决方案:我们目前有一个使用 jax-ws 的同步 Web 服务。

我需要做的是找到某种方法使客户端请求保持同步,即发送请求并且客户端被阻塞,直到得到响应,但服务器端将异步。

我还需要一个使用尽可能少的资源的解决方案,因为系统将收到许多请求,并且每个请求在最坏的情况下可能需要一些时间(几秒钟)。

我知道 servlet 3.0 可以满足所有这些要求,但我知道它不能与 Web 服务一起使用,是真的吗?

我还看到有一个名为 webservice over jms 的东西,我可以在其中定义一个接收客户端请求的队列和一个客户端将从中获取响应的另一个队列,但我没有看到任何关于它如何工作的示例客户端是否确实以同步方式工作。

你有什么想法?

提前致谢, Orel

4

1 回答 1

0

您可以设计您的 Web 服务以返回票证/句柄/令牌:

Handle submitRequest(Request request)

所以这个函数只接受你的请求,并立即返回。

稍后在客户端上,您可以轮询结果,因此您需要另一个功能。

Result poll(Handle handle)

如果请求处理已完成,则结果为非空。

在客户端上,您可以在对轮询函数的调用之间休眠(或更新进度条)。

这两个功能在服务器端都需要很少的资源。不需要打开的 HTTP 连接。它们只是充当基于 JMS 的异步处理引擎的前端。

另一方面,您必须根据您的业务需求分别调整轮询频率或睡眠持续时间(例如:100ms、250ms、500ms、1s、2s、3s)。

更新:

如果您无法更改客户端,则服务器可以代表客户端在服务端轮询异步结果。但是这样连接保持打开,所以你应该注意超时。

于 2013-06-13T08:33:37.513 回答