首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确保rector netty http客户端创建到http服务器固定连接

如何确保rector netty http客户端创建到http服务器固定连接
EN

Stack Overflow用户
提问于 2021-04-20 17:22:39
回答 1查看 117关注 0票数 0

我使用下面的代码来创建reactor netty http客户端,并使用这个客户端发送请求。

代码语言:javascript
运行
复制
ConnectionProvider connectionProvider = ConnectionProvider.builder("lead")
    .maxConnections(10)
    .pendingAcquireTimeout(Duration.ofSeconds(60))
    .pendingAcquireMaxCount(10)
    .maxLifeTime(Duration.ofSeconds(100))
    .maxIdleTime(Duration.ofSeconds(60))
    .build();

HttpClient httpClient = HttpClient.create(connectionProvider)
    .keepAlive(true);

我循环发送rquest:

代码语言:javascript
运行
复制
for (; ; ) {
    httpClient.get().uri("http://localhost:5230/test")
        .response()
        .subscribe();
}

我希望http客户端只创建10个到http服务器的连接,但是结果并不像预期的那样,客户端创建了很多到http服务器的连接(服务器监听5230端口)(这个连接很快就关闭了):

netstat -nap |grep "5230“输出

代码语言:javascript
运行
复制
  TCP    127.0.0.1:5230         0.0.0.0:0              LISTENING       1980
  TCP    127.0.0.1:5230         127.0.0.1:51012        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51014        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51015        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51016        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51017        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51018        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51019        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51020        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51021        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51022        ESTABLISHED     1980
  TCP    127.0.0.1:50393        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50394        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50395        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50396        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50397        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50398        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50399        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50400        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50401        127.0.0.1:5230         TIME_WAIT       0
  .... there is many connection in TIME_WAIT status....

如何确保http客户端只创建10个到http服务器的连接?

版本:

代码语言:javascript
运行
复制
jdk 1.8.0_201
reactory-netty 1.0.3
netty 4.15.9.Final
EN

回答 1

Stack Overflow用户

发布于 2021-04-20 19:18:16

Violeta Georgieva的帮助下,在可访问的网络中,response()方法会使http客户端关闭连接,因此http客户端创建多个到服务器的连接:创建连接->发送请求->关闭连接。

下面的代码按照预期工作:

代码语言:javascript
运行
复制
httpClient.get().uri("http://127.0.0.1:5230/test")
    .responseSingle(new BiFunction<HttpClientResponse, ByteBufMono, Mono<String>>() {
        @Override
        public Mono<String> apply(HttpClientResponse response, ByteBufMono byteBufMono) {
            return byteBufMono.asString();
        }
    })
    .subscribe();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67176053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档