2013-06-20 2 views
1

Я запускаю некоторые проблемы с моим аксессуаром jersey rest и клиентом.Джерси Клиент открывает слишком много подключений

Это, как им с использованием методов на стороне сервера:

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

Если я запустить клиент Джерси в то время как (истинный) цикл, есть соединения открыты и не будет рядом. Таким образом, я сталкиваюсь с проблемой. У меня много подключений, и моя сеть падает. Поэтому я больше не могу использовать свой сервер. После закрытия соединений я могу подключиться к серверу.

Это клиент:

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, есть ли способ сделать это в ressource или на клиенте? – user2504269

ответ

0

Я не знаю, как ограничить ресурсы Джерси на уровне веб-приложений. Если вы обновляетесь до GlassFish EE, вы можете сделать свои ресурсы EJBs @Stateless @StatelessDeployment (maxInstances = 16)

Скопление соединений может быть связано с настройками Keep-Alive. В Tomcat 6 есть два вы можете настроить свой соединитель с:

  1. MaxKeepAliveRequests, который по умолчанию 100. Это максимальное количество HTTP запросов, которые могут быть конвейерными до тех пор, пока соединение не будет закрыто сервером. Установка этого атрибута в 1 отключит поддержку HTTP/1.0, а также HTTP/1.1 keep-alive и конвейерную обработку. Установка этого параметра в -1 позволит неограниченное количество конвейерных или поддерживаемых HTTP-запросов.
  2. keepAliveTimeout, по умолчанию используется connectionTimeout, значение которого по умолчанию составляет 60k ms. Это количество миллисекунд, которое этот Коннектор будет ждать другого HTTP-запроса до закрытия соединения.
+0

Наша компания использует Tomcat 6, поэтому я не могу изменить Сервер. И, как я уже упоминал выше, я не могу настроить программу Tomcat, потому что на одном сервере работают другие приложения. – user2504269

Смежные вопросы