LINUX.ORG.RU

Держать кучу соединений


0

0

Необходимо одновременно держать кучу исходящих tcp соединений (пусть будет ~500). По соединениям в обе стороны бегают сообщения, обмен полностью асинхронный. Как бы это лучше организовать?

Со стороны интерфейса хочется простое AddMessageHandler(host) и SendMessage(host) для установки обработчика входящих и отправки исходящих сообщений. Думаю, как организовать систему внутри. Неблокирующий ввод/вывод получается слишком сложно, ибо select() осложняется наличием других сокетов в системе, требуется обрабатывать неблокирующий connect, нужно держать буфера для не до конца отправленных/принятых сообщений. Другая идея - потоки. С ними логика упрощается очень значительно, ибо все делается последовательно. Читаем сразу сколько нужно; если ошибка делаем socket/connect заново; пишем тоже сразу сколько есть не пугаясь блокировки. Но по потоку на соединение, думается, будет слишком много, т.е надо делать пул потоков?

anonymous

> Но по потоку на соединение, думается, будет слишком много

500 потоков это нормал.

А вообще асинхронный tcp-сервер это фигня, вот асинхронный ssl-сервер...

На каком языке пишешь? Под многие есть уже готовые либы и классы которые позволяют абстрагироваться от tcp вообше и работать с событиями типа on_recv(), on_send(), on_err(), on_close() итп и не заморачиваться буферами.

true_admin ★★★★★
()

Ну да, thread pooling это вариант.

MiracleMan ★★★★★
()
Ответ на: комментарий от anonymous

лучше libev. Не знаю как у него с биндингами для C++, для C точно нормальные.

true_admin ★★★★★
()

Мне как-то ближе с пачкой потоков работать. Повторно используемого кода будет достаточно много, и масштабируемость неплохая получится.

one_more_hokum ★★★
()

libevent или asio. 500 соединений это фигня, возможно даже потоки не придется воротить, хотя если и придется, то на libevent или asio это тривиально делается

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.