You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Armeria服务端主动关闭HTTP连接以测试客户端异常场景?

实现服务端主动关闭连接的最佳方式

不需要使用decorator,直接在HTTP服务的处理逻辑中通过ServiceRequestContext操作底层连接即可,这种方式轻量且灵活,非常适合Mock测试场景。

核心实现思路

Armeria的ServiceRequestContext提供了访问当前请求对应底层连接的能力,调用连接的close()方法会立即中断连接,完美模拟connection reset by peer的场景。

示例代码

场景1:立即关闭连接(无响应返回)

这种场景下客户端会直接收到连接重置错误,不会收到任何HTTP响应:

import com.linecorp.armeria.common.HttpRequest;
import com.linecorp.armeria.common.HttpResponse;
import com.linecorp.armeria.server.Server;
import com.linecorp.armeria.server.ServerBuilder;
import com.linecorp.armeria.server.ServiceRequestContext;

public class ConnectionResetMockServer {
    public static void main(String[] args) {
        final Server server = Server.builder()
                                    .http(8080)
                                    .service("/reset", (ServiceRequestContext ctx, HttpRequest req) -> {
                                        // 主动关闭当前连接
                                        ctx.connection().close();
                                        // 此处返回的响应不会被客户端接收
                                        return HttpResponse.of(200);
                                    })
                                    .build();
        server.start().join();
    }
}

场景2:发送部分响应后关闭连接

如果需要模拟发送部分数据后连接被重置的场景,可以监听响应写入事件:

.server.service("/reset-after-partial", (ServiceRequestContext ctx, HttpRequest req) -> {
    // 构造一个包含部分内容的响应
    final HttpResponse response = HttpResponse.of(200, "Content-Type: text/plain", "Hello, ");
    // 响应写入后立即关闭连接
    ctx.onResponseWritten(responseWritten -> ctx.connection().close());
    return response;
})

关键API说明

  • ServiceRequestContext.connection(): 获取当前请求绑定的底层连接实例,调用其close()方法会立即终止连接,触发客户端侧的连接重置错误。
  • ServiceRequestContext.onResponseWritten(): 注册一个回调,在响应内容写入到连接后执行,适合需要先发送部分数据再重置连接的场景。

为什么不使用Decorator?

Decorator主要用于全局统一的请求/响应拦截逻辑(如日志、权限控制),而测试场景下的连接重置是针对特定接口的定制行为,直接在服务处理逻辑中实现更灵活,无需额外的全局拦截层,降低不必要的复杂度。

内容的提问来源于stack exchange,提问作者Peter Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:25:07