Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BE иногда долго восстанавливает соединение и пропускает все команды от админа #94

Closed
tym32167 opened this issue May 19, 2018 · 6 comments
Assignees
Labels
Milestone

Comments

@tym32167
Copy link
Owner

После правок будет:

  1. При потере соединения будет автоматическая попытка восстановления (произойдет незамедлительно) + раз в минуту проверка наличия подключения.
  2. При потере соединения во время подключения - произойдет немедленное переподключение. Дается 100 попыток на немедленное переподключение. После 100 попыток подключиться, проверка будет просто раз в минуту, до восстановления подключения
  3. Если клиент не подключен, но админ посылает команды, то отправленные команды (до 10 штук) будут выполнены немедленно при подключении
  4. При попытке отправить команду неподключенному клиенту будет автоматом выполнена попытка подключения
@tym32167 tym32167 added the bug label May 19, 2018
@tym32167 tym32167 added this to the Release 0.8 milestone May 19, 2018
@tym32167 tym32167 self-assigned this May 19, 2018
@ToxaBes2
Copy link

ToxaBes2 commented May 19, 2018

При потере соединения во время подключения - произойдет немедленное переподключение. Дается 100 попыток на немедленное переподключение.

Может лучше 60 попыток с таймаутом в 1 сек?

tym32167 added a commit that referenced this issue May 19, 2018
@tym32167
Copy link
Owner Author

@ToxaBes Автор библиотеки, которую я использую, просто вызывал Connect() рекурсивно - поэтому при потере сети прога крашилась с переполнением стека. Я сначала убрал рекурсию совсем, и потому при подключении соединение могло потеряться и восстановиться только через минуту. Я хочу этого избежать, потому вернул рекурсию, но со счетчиком (надеюсь. автор примет мой пулл реквест с этим) - но если за 100 немедленных попыток соединение не восстановится, то и через секунду скорее всего не станет лучше, потому следующая проверка будет уже в течение минуты.

@ToxaBes2
Copy link

Я вот о чем имел ввиду: одно соединение это несколько этапов, таких как DNS resolving, TTFB (time to first byte) и другие. В нормальном состоянии сети это занимает миллисекунды. При восстановлении соединения это может занять более нескольких секунд. Поэтому я и предложил 60 попыток с задержкой в секунду. Как раз получится 1 минута.
Почему с задержкой: если при рекурсивном вызове все падало по SO то значит что не было предусмотрено ожидание результата предыдущего вызова или таймаута. Нет смысла 100 раз стрелять в первые 1-2 сек после потери соединения. Лучше стрелять каждую секунду в течении первой минуты, потом раз в минуту.

@tym32167
Copy link
Owner Author

@ToxaBes там код синхронный. То есть если резолвинг занимает 5 секунд, то одна попытка будет идти 5 секунд, потом снова попытка на 5 секунд и тд, пока не восстановится или не пройдет 100 попыток. Я просто почему не хочу делать интервалы - для коннекта с интервалами в течение минуты, мне надо либо фризить всю программу на минуту, либо добавлять асинхронщины\многопоточности, что займет много работы. Потому давай поглядим, как оно сейчас будет работать - если все будет ок, то так и оставлю. Будут проблемы - буду чинить.

@ToxaBes2
Copy link

Понял. Если есть ожидание завершения предыдущей попытки то действительно нет смысла городить огород.

@tym32167
Copy link
Owner Author

за день ни вылетов, ни потери соединения. Закрываю тикет

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants