异步 RESTful Web 服务是否可行?

2022-09-03 02:17:20

阅读RESTful文档,似乎不可能实现异步实例,但有人可能对SO更了解。

我的意思是,我想异步执行服务请求:

@Path("/helloworld", asyncSupported=true)
public class MyHelloWorldService {
    ...
}

我知道 没有定义,但我正在寻找类似于 .然后,我想使用实例(或任何等效项)。asyncSupported@Path@WebServletAsyncContext

这可能吗?


答案 1

RestEasy对它有一些支持1 - 使用名为的自定义注释。@Suspend

请参阅此处:http://docs.jboss.org/resteasy/docs/2.2.1.GA/userguide/html/Asynchronous_HTTP_Request_Processing.html

泽西岛之上还有一个名为Amosphere的框架/库,但是对于您的用例来说,这可能有些过分,因为它的重点似乎是长轮询客户端/服务器Web应用程序(例如聊天 - https://github.com/Atmosphere/atmosphere )

[1] 请求的 CDI 作用域将丢失在实际执行逻辑的线程中。有关详细信息,请参阅 RESTEasy-682 问题。这是一个我目前所知道的REST框架都没有解决的问题[2014年3月]


答案 2

CXF和Jetty Continuations显然可以做到这一点,但似乎只有Jetty 6才有可能。它们在Jetty 7中已更改为Servlet 3.0规范中的内容,我不知道CXF是否支持。此外,Jetty Continuations似乎是一个有点混乱的API,有很多手动的东西,所以我不知道转换代码有多容易。

不过,似乎还是有一定的可能性。随着微风的到来,当上帝愿意时。


推荐