【问题标题】:Async processing of requests in Java webappJava webapp中请求的异步处理
【发布时间】:2019-02-15 22:34:34
【问题描述】:

我需要编写一个 Web 应用程序,它接收大量 HTTP 请求并在返回响应之前需要很长时间(30 秒到 2 分钟)来处理每个请求(进而发出其他网络请求)。

因为会有很多请求进入并且这些连接保持打开状态,所以我正在考虑采用事件驱动的路线,这让我认为 Netty 是合适的。

如果每个请求都需要很长时间来处理,那会不会阻塞 netty 的处理?或者我可以接收一个请求,然后在将结果返回到请求的连接之前对其进行异步处理吗?

【问题讨论】:

    标签: java networking netty event-driven


    【解决方案1】:

    只要您不阻塞事件循环,您就能够处理大量并发请求(取决于可用内存以及您所使用的上下文的大小)为每个请求保留)。

    您需要做的是确保以非阻塞方式发出出站网络请求。这通常看起来像这样(在您的 Netty 入站处理程序中):

    CompletableFuture<YourResultType> future = remoteTarget.getStuff();
    future.thenApply(ctx::write);
    

    当然,如果您在处理程序之外执行此操作,则需要保留对上下文/通道的引用。

    请注意,这是一个简化的答案。如果您正在发出多个出站请求并具有一些业务逻辑,则需要使用期货上的延续或您正在使用的任何非阻塞模型正确地拼接您的代码。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多