我正在为 P2p 文件共享实现位种子。假设,最多 100 个对等方同时共享。TCP 连接在每个对等体到每个其他对等方之间设置。最初,一个对等方拥有整个文件并开始共享片段,随后,所有对等方共享其片段。
通常,片大小为 50kB - 1MB。我想知道,用 C 编写此类应用程序的最佳方法是什么.将线程与 epoll 或 libevent 一起使用?
任何人都可以给出不同可能方法的积极/消极吗?
如果我们在任何给定时刻只谈论 100 个对等连接,那么在一组 TCP 套接字上使用 select 或轮询的传统方法将奏效。
EPolll 有助于解决何时需要扩展到数千个长时间运行的连接的问题。 有关更多详细信息,请阅读有关 C10K 问题的文档。
我听说过关于libevent的好消息。我相信它是 epoll 和其他套接字函数之上的抽象,提供了一些不错的东西。如果它使您的编程更容易,那么请务必使用它。但您可能不需要它来提高性能。
Libevent
本质上是epoll
的包装器,主要用于编写好的可移植代码。由于它是一个包装器,因此将保留epoll
的缺点,并且从性能角度来看不会增加太多。如果可移植性不是问题,epoll
应该可以正常工作。更好的是,如果体积远小于一个仍然使用poll
.