2015-04-16 11 views
1

Я реализую бит-торрент для совместного использования файлов P2p. Предположим, что максимум из 100 одноранговых узлов одновременно. TCP-соединения устанавливаются между каждым одноранговым узлом всем другим партнерам. Первоначально у One peer есть весь файл, и он начинает делиться кусками, а затем все сверстники делят свои части.Epoll vs Libevent для Bittorrent как приложение

Обычно размер куска составляет 50 кБ - 1 МБ. Мне интересно, какой лучший подход написать такое приложение в C. Использование потоков с epoll или libevent ??

Может ли кто-нибудь, пожалуйста, дать положительные/отрицательные стороны различных возможных подходов?

ответ

1

Если мы говорим только о 100 одноранговых соединениях в любой момент времени, то традиционный подход использования select или poll в группе сокетов TCP будет хорошо работать.

EPoll помогает решить проблему, когда вам нужно масштабировать до тысяч длинных подключений. Прочтите документ на C10K problem для более подробной информации.

Я слышал хорошие вещи о libevent. Я считаю, что это абстракция поверх epoll и других функций сокетов, что дает несколько приятных вещей. Если это облегчит ваше программирование, то обязательно используйте его. Но вам, вероятно, это не нужно для производительности.

0

Libevent по существу обертка вокруг epoll, в основном рассматривается для написания хорошего портативного кода. Поскольку его обертка, недостатки epoll будут сохранены и не будут сильно отличаться от перспективы производительности. Если переносимость не беспокоит, epoll должен работать нормально. Еще лучше, если объем значительно меньше, чем один, все еще используют poll.