2013-06-20 80 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

相關問題