Nano Hash - криптовалюты, майнинг, программирование

Требования для повторяющихся TCP-подключений

Я использую Winsock, и мне необходимо повторно установить TCP-соединение со сторонним сервером. Эти приложения могут работать несколько дней подряд. Я единственный клиент, подключающийся к серверу. Время между соединениями составляет порядка секунд, и соединение остается достаточно долго, чтобы отправить одно сообщение размером в несколько байтов. В настоящее время я вижу, что соединения начинают отказывать (WSAECONNREFUSED) через несколько часов. Что я должен сделать (например, параметры сокетов и т. Д.), Чтобы гарантировать, что эти частые повторяющиеся подключения будут успешными в течение неопределенного времени? Спасибо!

05.03.2012

  • То, что вы описываете, обычно считается плохим поведением со стороны клиента. Ошибки отказа в соединении могут быть связаны с нехваткой ресурсов на сервере (или с ограничением скорости вашего клиента) из-за того, что он подключается слишком часто. Какой у вас вариант использования? Можете ли вы изменить свой дизайн так, чтобы требовалось меньше подключений? 06.03.2012
  • Что касается использования ресурсов, я не упомянул, что соединение остается достаточно долго, чтобы отправить несколько байтов. Я отредактировал исходный пост по этому поводу. Я опрашиваю сервер на предмет доступности услуг. Эта доступность часто меняется, и сервер не позволяет мне зарегистрироваться для получения уведомлений об изменениях доступности. Чтобы дать точное представление о состоянии системы моему пользователю-человеку, я часто опрашиваю. Я согласен, что это не идеально, и вполне может быть, что меня ограничивают (у меня нет документации на сервере, которая описывает приемлемую частоту подключения). 06.03.2012
  • Я расширю свой предыдущий комментарий, отметив, что netstat -an на сервере показывает около 13 соединений в состоянии TIME_WAIT. Хотя это звучит не очень хорошо, я не думаю, что проблема, о которой это говорит, заключается в том, что все доступные ресурсы были израсходованы, поскольку 13 - это небольшое число в этом контексте. 06.03.2012
  • Звучит правильно. Вам нужна дополнительная информация. Какие окна сообщают вам в журнале ошибок, пожалуйста? 06.03.2012
  • В журнале событий ничего, связанного с моей проблемой, не отображается. 06.03.2012
  • Также возможно, что ваш интернет-провайдер (или какой-либо интернет-провайдер между вами и вашим сторонним сервером) может подделывать пакеты TCP RST, чтобы помешать вам подключиться. Интернет-провайдер может интерпретировать вашего клиента как атаку типа «отказ в обслуживании» или какое-либо другое действие, которое они сочтут подозрительным. 06.03.2012
  • WSAECONNREFUSED 10061 В соединении отказано. Невозможно установить соединение, потому что целевой компьютер активно отказался от него. Обычно это происходит в результате попытки подключиться к службе, которая неактивна на внешнем узле, то есть к службе, на которой не запущено серверное приложение. Когда в вашем приложении возникает ошибка, попробуйте запустить telnet IP PORT, чтобы проверить, не работает ли сервер все еще активен. Кстати, у вас есть файл журнала на стороне сервера? 06.03.2012

Ответы:


1

При выполнении большого количества подключений на основе транзакций и возникновении проблем с продолжительностью состояния TCP TIME_WAIT (которое длится 2MSL = 120 секунд), приводящих к тому, что для клиентского хоста больше нет доступных соединений со специальным серверным хостом, вам следует рассмотреть возможность использования UDP и самостоятельно управлять повторным подключением. отправка потерянных запросов.

Я знаю, это звучит странно. Но стандартные службы, такие как DNS, должны использовать UDP для обработки тонны транзакций (запросить затем один ответ в одном сегменте UDP), чтобы избежать проблем, с которыми вы экспериментируете сами. Веб-браузеры отправляют запрос через UDP в DNS. Повторный запрос выполняется с использованием UDP через короткое время, я думаю, не дольше нескольких миллисекунд. Иногда разрешенное имя слишком длинное и не помещается в пакет UDP. Как следствие, DNS-сервер отправляет ответ UDP с поднятым выделенным флагом, чтобы попросить клиента использовать TCP на этот раз.

Кроме того, вы можете также рассмотреть расширение T / TCP (Transactional TCP) TCP, если оно доступно на вашей платформе Windows. Он обеспечивает надежность TCP с более коротким состоянием TIME_WAIT, так как почти не требует изменений в коде вашего клиента. Насколько мне известно, это может работать, даже если сервер не обрабатывает это расширение. В качестве примечания, он в настоящее время не используется в Интернете, так как, как известно, имеет некоторые недостатки ...

05.03.2012
  • Ваше предложение вовсе не звучит странно, и я ценю, что вы нашли время предложить их. К сожалению, у меня нет доступа к коду сервера, поэтому я не могу изменить способ его взаимодействия. 06.03.2012
  • Что касается новой информации, которую вы предоставляете в своем комментарии, мой ответ вам не поможет. Извини за это. Что вы можете попробовать сделать, так это изменить конфигурацию на клиентском хосте, чтобы сократить продолжительность состояния MSL или TIME_WAIT, освободив соединения с серверным хостом раньше. Так как я не специалист, не могу сказать, возможно ли это ... 06.03.2012
  • По поводу ссылки на активное закрытое обсуждение. Я действительно закрываю розетку, как только с ней покончено. 06.03.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..