параллельно 20 корутин с withTimeoutOrNull(1000L), но два последних сервера недоступны и корутина почему-то ждет пока от них таймаут не прилетит, но должна была завершить эту дочернюю корутину. Как вручную отменить подключение к сокету?
Вы наверное на Kotlin пишете? Я не пишу на нем, но думаю, потому что под капотом системный вызов ) И он блочит корутину ) Я бы делал в отдельном потоке ) Может что ребята подскажут.
Кстати у меня нет connect. Сокет сразу подключается как только я его создаю. Я смотрю, что у метода коннект есть настраиваемый таймаут, но вот как его сделать когда сокет сам подключается
Не знаю, использовать какой нибудь AsynchronousSocketChannel )))
Сделал вручную так как в конструкторе он сам коннектится с таймаутов в 3 минуты. Делается так val socket2 = Socket() socket2.connect(InetSocketAddress(hostAddress, port), 1000) socket2.close()
У меня есть еще идея как трекать качество проверки: как видно из моего плана часть серверов, соединение с которыми пересечет заданный таймаут, будут просто отброшены. Значит я могу знать начальное количество до проверки и количество тех, которые проверку прошли. Я могу понять какой процент прошел и если он подозрительно мал - запустить проверку снова через какое-то время.
И таких ребят тысячи ) Бедные сервера :D
Разве сервера могу пострадать если установить с ними соединение и то неудачно на долю секунды?
Конечно, вы же занимаете соединение - ресурс системы ) И не вы один стучитесь в данную минуту )
Ну предположим это будет 5-10 тысяч человек. Если они раз в неделю попробую открыть сокет, разве это большая нагрузка?
И останется у вас массив адресов. Дальше то что ?)
Дальше я могу выбрать самый лучший сервер для региона
Сомневаюсь я ) Ну, ладно, расскажете потом, что у вас получилось )))
Обсуждают сегодня