使用libEvent的高性能服务器

时间:2013-03-20 15:25:48

标签: c++ libevent

我正在设计一个高性能服务器(而不是HTTP服务器)并正在考虑我的设计选项。服务器应支持大量传入连接(以千计),并在Windows和Linux上进行编译。

在Windows端,我已经实现了一个IO完成端口服务器,到目前为止似乎处理压力。由于Linux需求弹出,我现在尝试找到一个跨平台库,它为我提供了一种方法来使用线程池中的接受/读取事件。

到目前为止,libEvent似乎是正确的选择(类似于“{3}}中的”示例代码:回显服务器“。但引用link

  

如果将event_base设置为使用锁定,则可以安全地访问它   多个线程之间。它的循环只能在一个线程中运行,   然而。如果您想让多个线程轮询IO,则需要   为每个线程都有一个event_base。

我的基本设计是让线程池响应接受和读取事件。如果我理解正确的话,这句话说我做不到。

有没有人对高性能有任何经验。基于libEvent的服务器?我可以使用不同的库吗?

此类服务器的示例代码将是完美的

1 个答案:

答案 0 :(得分:6)

如果你想保持跨平台,

libevent就是你要走的路。

如果你想要高效,我会推荐特定于平台的API,比如IO完成端口(你在Windows上工作)和Linux中的epoll

请注意,libevent无论如何都会在内部使用epoll。

至于你的多线程设计问题,我希望你没有使用一个线程来处理每个传入的客户端连接...如果你这样做,你将失去使用事件驱动模型的目的!您应该设计代码,以便单个线程处理少量客户端连接,并随着并发连接数的增加而增加线程数。

我也不会对客户端在正在执行IO接收数据的线程池中发送的数据进行任何繁重的计算工作。我将执行网络密集型IO和将任何CPU密集型计算的任务分成两个独立的线程池