【问题标题】:Asynchronous request in RESTFul WebService [closed]RESTFul WebService 中的异步请求 [关闭]
【发布时间】:2013-11-20 16:56:14
【问题描述】:

我需要创建一个基于 REST 的 Web 服务,以异步处理请求。 通过异步,我的意思是客户端将发出请求并继续执行而不等待服务的响应。是否有可能实现这一点? 我需要在 WebSphere Application Server 中部署服务。

【问题讨论】:

标签: web-services rest asynchronous


【解决方案1】:

所以我不确定你的问题是关于如何在服务器上进行异步处理,或者如何以 RESTful 方式处理异步操作。如果是后者,那么这里是对建议的方法的总结:http://restcookbook.com/Resources/asynchroneous-operations/

将您的服务方法编码为

  • (a) 异步处理请求的操作(使用单独的 线程最有可能)。
  • (b) 立即返回响应代码 202-Accepted
  • (c) 在响应正文中,返回代表请求操作状态的 URI。

然后将您的客户端编码为:

  • (a) 调用主服务方法。响应完成后,如果响应码是202,注意body中返回的URI。
  • (b) 在后台线程中,定期轮询该 URI,直到它返回操作完成的指示。
【解决方案2】:

是的,您可以创建一个线程来调用您的 REST 服务。也许你可以在这里看到如何实现这一点:

http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

【讨论】:

  • 我将从我的 Web 应用程序中访问 Web 服务(客户端基本上是一个 servlet)。据我所知,在 Web 应用程序中显式创建线程并不是一个好习惯。
  • 一般来说线程是一种有限的资源,在创建它们时应该小心。这并不意味着使用线程是一种不好的做法。如何执行取决于您的应用程序需求。该应用程序是否预计会为大量并发用户提供服务?如果是这样,那么您可能需要查看线程池。
  • 排队是另一种需要考虑的方法。将一个或多个后台线程专门用于处理这些请求。让您的 Web 服务简单地将请求放入全局可访问的队列中。然后后台线程将一次处理一个请求。这种方法的优点是您可以完全控制在任何给定时间存在的线程数。
猜你喜欢
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
相关资源
最近更新 更多