Jersey客户端打开太多连接

时间:2013-06-20 08:32:48

标签: connection client jersey jax-rs

我在我的球衣休息api和客户端遇到了一些问题。

这就是我在服务器端使用这些方法的方式:

@POST
@Path("/seed")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response addSeed(Seed seed) throws InterruptedException {

    if (!Validator.isValidSeed(seed)) {
        return Response.status(400).entity("{\"message\":\"Please verify your JSON!\", \"stat\":\"failed\"}")
                .build();
    }
        save(seed);
        return Response.status(200).build();
}

如果我在while(true)循环中运行Jersey客户端,则会打开连接并且不会关闭。所以我遇到一个问题,我打开了很多连接,我的网络崩溃了。所以我不能再使用我的服务器了。关闭连接后,我可以连接到服务器。

这是一个客户:

    ClientConfig config = new DefaultClientConfig();
    Client client = Client.create(config);
    WebResource service = client.resource(getBaseURI()).path("api/seed");
    while (true) {
            ClientResponse cr = service.header("Content-Type", "application/json").post(ClientResponse.class, seed);
            System.out.println(cr);
            cr.close();

我的问题是:

我可以在服务器端做什么,以防止客户打开新连接?

如何指定最大连接数?

我应该如何实施jersey客户端以重用开放连接?

1 个答案:

答案 0 :(得分:0)

我不知道如何在网络应用程序级别限制泽西岛资源。如果升级到GlassFish EE,则可以使资源EJB @Stateless @StatelessDeployment(maxInstances = 16)

连接堆积可能是因为Keep-Alive设置。在Tomcat 6中,您可以使用以下两种方式调整连接器:

  1. maxKeepAliveRequests,默认为100.这是在服务器关闭连接之前可以流水线化的最大HTTP请求数。将此属性设置为1将禁用HTTP / 1.0 keep-alive,以及HTTP / 1.1 keep-alive和pipelining。将此值设置为-1将允许无限量的流水线或保持活动的HTTP请求。
  2. keepAliveTimeout,默认为connectionTimeout,默认为60k ms。它是此连接器在关闭连接之前等待另一个HTTP请求的毫秒数。