I have a RESTful server which takes an http POST input from client to vote up songs on server. I have used Apache HTTPClient for client.
public boolean vote() {
HttpClient client = new DefaultHttpClient(getHttpParameters());
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); // Timeout Limit
HttpResponse response;
try {
HttpPost post = new HttpPost("http://127.0.0.1:8080/ws/");
StringEntity se = new StringEntity("{ "song_id" : "2" }");
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
post.setEntity(se);
response = client.execute(post);
if (response != null) {
InputStream in = response.getEntity().getContent(); // Get the data in the Entity
String result = convertStreamToString(in);
return true;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return false;
}
public static HttpParams getHttpParameters() {
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 30000;
HttpConnectionParams.setConnectionTimeout(httpParameters,
timeoutConnection);
int timeoutSocket = 30000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
return httpParameters;
}
When I click vote button on succession, after few votes (like 7-8), I get java.net.SocketTimeoutException: Read timed out
exception.
When I searched the reason, I found this is because client didn’t get server response on timeout period. But the problem is that when I use other applications like Chrome REST Console or JMeter, I can vote a lots of votes on the same server with same parameters and path. Is there any problem with my java code. Please help me figure this out. Following is my stacktrace:
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
at notdefault.ServerStuffs.vote(ServerStuffs.java:72)
at notdefault.MainClass.actionPerformed(MainClass.java:105)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
at notdefault.ServerStuffs.vote(ServerStuffs.java:72)
at notdefault.MainClass.actionPerformed(MainClass.java:105)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
5
14 комментариев
- популярные
- новые
-
+1Вопросы:
Режим отладки включен? (если включен — выключить)
Используется ли вариант доставки в точки выдачи заказов, настроенных на маркете? (если да, то стоит включить кеширование — memcached или хотя бы файловое)
Настроены ли плагины расчета стоимости доставки, использующие внешние сервисы? (часть плагинов «не сознается» что они используют обращения к внешним ресурсам, а это драгоценное время. Такие плагины лучше не использовать. Решение по облегчению ситуации с ними стоит искать совместно с разработчиками плагинов в сторону оптимизаций расчетов и кеширования)
Маркет лимитирует время на ответ крайне жестко: всего 5.5 секунды
-
+1Добрый день!
Также сталкиваемся с аналогичной проблемой — постоянные ошибки по API http://prntscr.com/czycq3
Магазин у нас в облаке, поэтому мы особо на скорость повлиять не можем. Плагины используются ваши встроенные — курьерская доставка, например.
Какие пути решения посоветуете.
-
+1Если из плагинов доставки у вас установлены только те, которые не обращаются к внешним сервисам для получения стоимости доставки значит, для решения проблемы вам необходимо обратиться в службу поддержки Webasyst.
-
-
+1Аналогичная проблема. Плагин расчета СДЭК скорее всего из за него. Как решить проблему?
-
+1Единственное решение сейчас — не использовать этот плагин (если память не подводит, их сервера не отличаются скоростью ответа на запрос расчета стоимости доставки). Общего решения пока нет (прогнозы по срокам сложно дать), только на уровне отдельных плагинов силами их разработчиков (кеширование/оптимизация).
-
+1я не разработчик таких плагинов, но стало даже интересно …
Тот же СДЭК, например, как кешировать? Мало того, что городов дофига, так он же еще от веса/габаритов, вроде, считает?
-
+1Можно попробовать создать ключ для кеширования на основе параметров, от которых зависит стоимость (вес/габариты можно «квантовать», если поддержка сервиса согласится разгласить величину квантования). Это на повторных запросах даст выигрыш по времени. Можно заранее считать «типовые» заказы (ассортимент известен, в заказ попадает, чаще всего, поштучно, можно попробовать «сгенерировать» кеш для плагинов доставки после сохранения настроек кампании хотя бы для домашнего региона).
-
-
-
-
+1Владислав, я конечно благодарен вам за ответ Вячеславу, как и сам Вячеслав, но на мой вопрос я ответа не получил.
Попробую ещё раз — у нас магазин в облаке, тариф Про. Регулярно вылетают ошибки API Маркета, который подключен через Ваш плагин. Также из Ваших плагинов подключен Courier — т.к. конечный пользователь Маркета должен чётко понимать сколько стоит доставка и Маркет штрафует магазин за несоответствие информации на сайте информации в Маркете.
Таким образом, мы имеем ваше облачное решение + ваши плагины. И регулярные проблемы с API Маркета.
Подскажите, пожалуйста, каким образом решить данные проблемы? Может быть нужно провести какие-то дополнительные настройки силами ваших специалистов за отдельные деньги? Может быть, проблема решится переходом на более дорогой тариф?
Хочется понимать, какие ресурсы и средства необходимы, чтобы решить данную проблему.
-
+1Теперь периодически возникают ошибки HTTP — https://yadi.sk/i/VnvWFXTsxpLNC
Хочется всё же услышать позицию разработчиков, т.к. ошибки Маркет показывает постоянно и ежедневно.
-
+1логи с 500-ой ошибки (скопируйте запрос и ответ сервера и отправьте в запросе в поддержку их) — стоит просмотреть, поскольку ошибка странная.
Про таймаут: из плагинов используется только курьер? включены ли точки самовывоза?
-
+1Ну вот
логи ответа-запроса для случаев 500-ой ошибки не дали, на вопрос об используемых плагинах и точках продаж не ответили (для точек продаж в крайнем обновлении добавилось кеширование, должно уменьшить время ответа).
-
+1Владислав, спасибо за ваши ответы.
про 500 ошибку разобрались — это из-за обновления серверного оборудования.
С техподдержкой ведём беседу, они заботливо предлагают:
1. Не пользоваться плагинами, которые автоматически считают стоимость — из них мы используем ваши же «Курьерская доставка» и «Самовывоз». Считаю, что это неправильно по множеству причин и свою позицию описал техподдержке
2. Попросить Яндекс увеличить timeout для Маркета — осознавая тщетность этой просьбы, я всё же направил в Яндекс письмо и получил единственно логичный ответ: «Указанные таймауты являются глобальными в рамках Маркета и не могут быть изменены в индивидуальном порядке.»
Вот, кстати, новый список ошибок: https://yadi.sk/i/pa9zZjlcxwvVT
-
-
-
+2Добрый день.
Наблюдаем такую же проблему.
Постоянно вылетает Яндекс.
Из плагинов доставки установлены СДЭК и Боксберри.Сегодня прислали вот такое письмо:
Мы заметили, что у вас систематически возникают ошибки в обмене данных через API.Чтобы найти проблему, посмотрите лог запросов к вашему серверу.
Если при повторной проверке мы обнаружим такие же ошибки, нам придётся приостановить работу магазина до тех пор, пока вы не устраните причины их появления.Есть какое-нибудь решение?
I/O error on POST request for "https://SITE.ru/beruru_api/": Read timed out; nested exception is java.net.SocketTimeoutException: Read timed out
Эта тема в архиве. Добавление комментариев к ней отключено.
Hi All ,
I have webservice client connecting to SOAP Servivces through HTTPS using sun JSSE implementation. Everytime i make a webservice call i get the Read timed out exception. I am sure of SSL handshaking is happening. Below is the stack trace. I am behind the proxy as well.
Anything obivious wrong in here.
Thakns in advance.
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.net.SocketTimeoutException: Read timed out
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.a(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(Unknown Source)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at org.apache.axis.transport.http.HTTPSender.readHeadersFromSocket(HTTPSender.java:506)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:127)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:150)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:120)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:180)
at org.apache.axis.client.Call.invokeEngine(Call.java:2564)
at org.apache.axis.client.Call.invoke(Call.java:2553)
at org.apache.axis.client.Call.invoke(Call.java:2248)
at org.apache.axis.client.Call.invoke(Call.java:2171)
at org.apache.axis.client.Call.invoke(Call.java:1691)
at GetCLD.getCLD(GetCLD.java:110)
at GetCLD.main(GetCLD.java:145)
java.net.SocketTimeoutException: Read timed out
at org.apache.axis.AxisFault.makeFault(AxisFault.java:129)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:131)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:150)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:120)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:180)
at org.apache.axis.client.Call.invokeEngine(Call.java:2564)
at org.apache.axis.client.Call.invoke(Call.java:2553)
at org.apache.axis.client.Call.invoke(Call.java:2248)
at org.apache.axis.client.Call.invoke(Call.java:2171)
at org.apache.axis.client.Call.invoke(Call.java:1691)
at GetCLD.getCLD(GetCLD.java:110)
at GetCLD.main(GetCLD.java:145)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.a(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(Unknown Source)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at org.apache.axis.transport.http.HTTPSender.readHeadersFromSocket(HTTPSender.java:506)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:127)
… 11 more
java.lang.NullPointerException
at ParseResult.getStatus(ParseResult.java:5)
at GetCLD.main(GetCLD.java:150)