C ++ дизайн сокетов - PullRequest
       46

C ++ дизайн сокетов

1 голос
/ 08 марта 2012

Я разрабатываю программу сокета клиент-сервер с использованием TCP / IP.

Сервер прослушивает определенный порт, клиентская программа устанавливает 2 соединения с сервером.Один для команды и ответа, а другой - для потоковой передачи данных.

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

Для потоковых данных сервер будет ждать, пока клиент отправит команду start stream, и начнет непрерывную отправку данных этому клиенту.Теперь проблема в том, что мне нужно, чтобы обработчик также прослушивал это соединение для команды stop stream.Следовательно, я думал о том, чтобы сделать это соединение неблокирующим, чтобы прием не блокировался с последующей неблокирующей отправкой.

Эффективен ли этот метод реализации обработчика сервера и клиента?

Ответы [ 3 ]

2 голосов
/ 08 марта 2012

Взгляните на уровень управления сокетами Boost :: asio. Это очень хорошо написано.

http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/tutorial/tutdaytime1.html

1 голос
/ 08 марта 2012

Да, это очень эффективно.

Вы можете использовать такие библиотеки, как libevent .

0 голосов
/ 08 марта 2012

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

К счастью, существует несколько зрелых сред с открытым исходным кодом, которые вы можете использовать.Среди них libev - самый легкий.

...