блокировка сокетов между двумя процессами в C на Unix - PullRequest
0 голосов
/ 04 января 2011

Спасибо, если кто-нибудь может помочь мне найти лучшее решение ...

В моем приложении есть клиент TCP (C) и другой сервер TCP (S) на машине linux.

В производственной среде, при высокой нагрузке этот сервер иногда прекращает прием запроса от клиента и, следовательно, создает узкие места для клиента, поскольку сторона клиента является блокирующим сокетом. Чтобы воссоздать проблему локально.способ воссоздания проблемы.

Кто-нибудь может предложить какой-то другой механизм для блокировки сокета, не нарушая процесс?

Ответы [ 3 ]

0 голосов
/ 04 января 2011
Can anyone suggest some other mechanism to block the socket wihout

мешает процессу?

Делать соединение в отдельном потоке, чтобы не блокировать весь процесс

0 голосов
/ 04 января 2011

Я не совсем понял, но, думаю, вы внедрили заблокированный tcp-сервер.Если это так, то могут быть методы для ее решения

  1. Использование многопоточной или управляемой событиями архитектуры для повышения эффективности ввода / вывода.
  2. Извлечение кода методов ввода / вывода изостальные
  3. Может потребоваться многопроцессорная обработка, чтобы избежать системных ограничений, таких как количество открытых файлов.
0 голосов
/ 04 января 2011

Что именно вы хотели бы услышать?Если сервер занят, то есть другие процессы обслуживаются, потому что они тоже получают долю от временных интервалов от планировщика, вы ничего не можете сделать, кроме как повысить приоритет программы / длину временного интервала или уменьшить их.

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

Есть ли у вас кодпоказать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...