2015-03-04 7 views
-3

Я пишу программу P2P на C++, так что программа работает на нескольких хостах, и каждый хост подключается напрямую друг к другу (т. Е. Полный график).Можете ли вы предложить лучшую практику для программирования сокетов p2p?

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

Мне нужно, чтобы сообщение не было узким местом и действительно хорошее время. Должен ли я использовать отдельный поток для каждого соединения? или какой-то бесконечный цикл? как насчет приема новых соединений? (то есть accept()). Doit не имеет значения, находится ли он под Linux или Windows? Какие еще вопросы я должен рассмотреть?

Я нашел несколько вопросов с подмножеством моей проблемы, но они не были полностью решены моими проблемами. (thisthis и, например)

ответ

0

Я хотел бы предложить асинхронную сеть для таких вещей, boost::asio и QtNetwork быть хорошими примерами. Они используют зависящие от системы функции (например, epoll, iocp, kqueue и другие), которые принимают 0% CPU (в то время как бесконечный цикл обычно принимает 100%). Производительность великолепна при условии, что библиотека используется правильно.

Советую немного почитать что-то вроде epoll, чтобы понять, как это работает под капотом.

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

Смежные вопросы