2013-06-20 79 views
1

我运行在我的球衣休息API和客户端的一些问题。泽西岛客户端打开太多连接

这是如何使用基于服务器端的方法IM:

@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(); 
} 

如果我在一段时间(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(); 

我的问题是:

我能做些什么,在服务器端,以防止客户端打开一个新的连接?

如何指定最大连接数?

而我应该如何实现球衣客户端重用打开连接?

+0

什么是您的服务器? – TheArchitect

+0

我使用的是tomcat 6,我可以在server.xml中指定maxThreads的数量。但我不想更改server.xml,有没有办法在资源或客户端做到这一点? – user2504269

回答

0

我不知道在网页应用程序级别限制Jersey资源的方法。如果升级到GlassFish EE,则可以使您的资源EJB @Stateless @StatelessDeployment(maxInstances = 16)

连接堆积可能是因为Keep-Alive设置。在Tomcat的6有两种,你可以调整你的连接器:

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

我们公司正在使用Tomcat 6,所以我无法更改服务器。正如我上面提到的,我不能咀嚼Tomcat配置,因为有一些其他应用程序在同一台服务器上运行。 – user2504269

相关问题