Symb1OS/blackdesert-fishbot

Проблема с задержкой распознавания

TrurlMcByte opened this issue · 4 comments

  • Версия 1.8.5
  • Тип ПК: Стационар
  • Производительность ПК: Высокая
  • Режим работы: ROBOT

Иногда очень долго распознаётся капча (сервер перегружен/плохой инет), ответ приходит сильно после того, как рыба уже сорвалась и чар находится в режиме ожидания. В этот момент бот, вдруг, без проверки, начинает "вводить" опоздавшую капчу, а на самом деле - ходить вокруг в случайных направлениях (в зависимости от капчи). В итоге в конце концов либо удаляется от воды, либо падает в эту самую воду. Надо бы хотя бы добавить таймаут на распознавание капчи.

я тут накидал от нечего делать

index 27ba372..dccdff5 100644
--- a/src/main/java/ru/namibios/arduino/model/bot/service/HttpService.java
+++ b/src/main/java/ru/namibios/arduino/model/bot/service/HttpService.java
@@ -14,6 +14,7 @@ import org.apache.http.entity.ContentType;
 import org.apache.http.entity.mime.HttpMultipartMode;
 import org.apache.http.entity.mime.MultipartEntityBuilder;
 import org.apache.http.impl.client.HttpClients;
+import org.apache.http.client.config.RequestConfig;
 import org.apache.http.message.BasicHeader;
 import org.apache.http.message.BasicNameValuePair;
 import org.apache.http.util.EntityUtils;
@@ -73,7 +74,11 @@ public class HttpService {
         SSLContext tls = getSSLContext();

         Header header = new BasicHeader("x-forwarded-for", AppUtils.getForwaded());
+        RequestConfig requestConfig = RequestConfig.custom()
+        .setConnectTimeout(15000)
+        .setSocketTimeout(15000).build();
         httpClient = HttpClients.custom()
+                .setDefaultRequestConfig(requestConfig)
                 .setDefaultHeaders(Collections.singletonList(header))
                 .setSSLContext(tls)
                 .build();

в принципе вроде ничего не сломал, но ошибок пока не было.

PS. С детства не люблю Java

Желательно еще логи приложить, где подобная проблема всплывает, чтобы я мог посмотреть что на сервере творилось в это время.

Только мне кажется что задержка в 15 секунд слишком большая. Не засекал сколько времени отводится на ввод капчи, но думаю что не больше 5-6 секунд, поэтому примерно таким значение можно и ограничить. Ну и желательно ограничение на время ответа указать только для запроса на парсинг капчи, а не для всего http-клиента. Добавлю в следующей версии.

Да, про 5-6 секунд точно, у себя уже исправил на 6000, буду смотреть дальше.
Логи не сохранились при ребилде.
Еще периодически наблюдается странный баг с самозапуском бота после остановки. Причём даже если он в это время уже был опять повторно запущен (сама собой появляется модалка "Program already running"). Клаву и мышку никто не трогал при этом. Явно что-то с новыми паузами связано.

Исправлено в версии 1.8.6

Добавлены параметры на время подключения/ответа:

  • bot.http.connect_timeout=15000;
  • bot.http.socket_timeout=15000;
  • bot.http.socket_timeout.captcha=6000.