当前位置: 首页 > 知识库问答 >
问题:

HttpClient连接未关闭

王昆
2023-03-14

版本

vert.x core: 3.3.0

上下文

我只是想在核心示例io中运行http客户端。维特斯。实例果心http。易于理解的客户运行此示例时,its发现已建立的连接在请求完成后未关闭。

服务器端我没有看到任何问题。因为在尝试使用jmeter和服务器时,它工作得很好。所以我认为问题在于HttpClient。

有人能帮我吗?

提前谢谢。复制的步骤

running io.vertx.example.core.http.simple.Server code
running io.vertx.example.core.http.simple.Client code

额外的

即使在请求和响应结束后,仍会显示以下内容。在给LINUX

lsof -i -P
java 32551 USER 223u IPv4 16264097 0t0 TCP localhost:8080->localhost:26980 (ESTABLISHED)
java 32634 USER 218u IPv4 16264087 0t0 TCP localhost:26980->localhost:8080 (ESTABLISHED)

窗户

TCP    127.0.0.1:8080         FSSCHND12957:56893     ESTABLISHED
TCP    127.0.0.1:56893        FSSCHND12957:8080      ESTABLISHED

在LINUX和WINDOWS系统中进行了尝试。

客户端代码

package io.vertx.example.core.http.simple;

import io.vertx.core.AbstractVerticle;
import io.vertx.example.util.Runner;

/*

    @author Tim Fox
    */
    public class Client extends AbstractVerticle {

    // Convenience method so you can run it in your IDE
    public static void main(String[] args) {
    Runner.runExample(Client.class);
    }

    @Override
    public void start() throws Exception {
    vertx.createHttpClient().getNow(8080, "localhost", "/", resp -> {
    System.out.println("Got response " + resp.statusCode());
    resp.bodyHandler(body -> {
    System.out.println("Got data " + body.toString("ISO-8859-1"));
    });
    });
    }
    }

服务器代码

package io.vertx.example.core.http.simple;

import io.vertx.core.AbstractVerticle;
import io.vertx.example.util.Runner;

/*

    @author Tim Fox
    */
    public class Server extends AbstractVerticle {

    // Convenience method so you can run it in your IDE
    public static void main(String[] args) {
    Runner.runExample(Server.class);
    }

    @Override
    public void start() throws Exception {
    vertx.createHttpServer().requestHandler(req -> {
    req.response().putHeader("content-type", "text/html").end("
    Hello from vert.x!
    ");

    }).listen(8080);
    }
    }

共有1个答案

沈博延
2023-03-14

我们必须关闭httpClient,这是我们在java中通常做的。只有end()没有关闭连接。httpClient。关闭()是必需的。。。。这解决了我的问题。。

修改代码:

public class Client extends AbstractVerticle {

// Convenience method so you can run it in your IDE
public static void main(String[] args) {
    Runner.runExample(Client.class);
}

@Override
public void start() throws Exception {
    HttpClient httpClient = vertx.createHttpClient().getNow(8080, "localhost", "/", resp -> {
        System.out.println("Got response " + resp.statusCode());
        resp.bodyHandler(body -> {
            System.out.println("Got data " + body.toString("ISO-8859-1"));
            httpClient.close();
        });
    });
}
}
 类似资料:
  • 我正在使用HttpClient v4.5.5 我有一个如下: 然后我使用超文本传输协议客户端如下: 通过定期调用(每隔几分钟) 偶尔我会出错 ,据我所知,这种情况要么发生在旧的HttpClient版本上,要么发生在您关闭HttpClient时。我没有这样做。所以我不明白为什么会出现这个错误。它会恢复,但有这样的异常是个问题。

  • 我正在使用spring rest模板发送与apache http client 4.2.1集成的rest请求。 由于需要向多个服务器发送请求,增加了PoolingClientConnectionManager来管理连接。 当系统运行几天后,我们发现连接达到了最大每路由设置。 打印日志如下所示保持活动的总数:0;分配路线:5选5;分配总数:100个中的5个 似乎由于某种原因,连接没有被释放。但是当我

  • 给出错误的方法如下: 如何创建一个没有泄漏的连接?为什么Hikari认为我的conn.close()方法没有关闭连接?任何想法都很欣赏。

  • 我在web应用程序中遇到了一个HttpClient(版本4.5.2)的问题,我的意思是,以多线程的方式。在正常情况下,当一个连接请求到达时,从池中租用一个连接,然后使用,最后再次释放回池中,以便在以后的请求中再次使用,作为id为673890的连接状态日志的以下部分。 在以我上面提到的正常方式多次使用上述连接(id 673890)后,我注意到代码中发生了以下情况: 日志说连接被请求、租用、使用、关闭

  • 我有一个带有数据库连接池的grails/groovy web应用程序。设置如下所示: 我使用java melody进行诊断和监控,并注意到一些奇怪的行为。例如,当执行查询数据库的作业时,连接可以超越maxActive属性。为什么这是可能的? 我需要显式关闭Grails连接吗?该作业调用一个服务方法,该方法通过withCriteria Grails调用简单地执行DB查询,如: 似乎每次运行这个程序,

  • 我正在使用DBCP连接池,并创建了一个MBean来在Jconsole中显示连接池的统计信息。我观察到的是,即使应用程序上没有活动(意味着没有页面点击等),连接池统计数据也会显示活动连接。 我们在上面看到的16个虚拟连接并没有降到零。我不知道为什么?有人能解释一下吗? 谢谢