我正在设计一个高性能的服务器(不是HTTP服务器),并且正在考虑我的设计方案。服务器应该支持大量传入连接(以千计),并在windows和linux上进行编译。
在windows端,我已经实现了一个IO完成端口服务器,到目前为止,该服务器似乎能够处理压力。由于linux需求弹出,我现在尝试找到一个跨平台库,它为我提供了一种使用线程池的accept / read事件的方法。
到目前为止,libEvent似乎是正确的选择(类似于此链接中的“示例代码:回送服务器”)。但是引用libEvent文档中的另一页的话
如果event_base设置为使用锁定,则在多个线程之间访问它是安全的。但是,它的循环只能在一个线程中运行。如果您想让多个线程轮询IO,则需要为每个线程提供一个event_base。
我的基本设计是让线程池响应接受和读取事件。这句话,如果我理解得对的话,就说我做不到。
有没有人有过高性价比的经验。基于libEvent的服务器?我应该换个图书馆吗?
这样的服务器的示例代码将是完美的。
发布于 2013-03-20 16:29:48
如果你想保持跨平台的话,libevent是最好的选择。
如果您想提高效率,我将推荐平台特定的API,比如IO完成端口(您已经使用了Windows)和Linux中的epoll:
请注意,libevent在Linux内部使用epoll。
至于您的多读设计问题,我希望您不要用一个线程来处理每个传入的客户端连接。如果你使用事件驱动的模型,你就会失败!您应该设计您的代码,以便由单个线程处理少量客户端连接,并随着并发连接数量的增加而增加线程数。
我也不会对客户端在执行接收数据的IO的线程池中发送的数据做任何繁重的计算工作。我将把做网络密集IO和做任何CPU密集计算的任务分成两个单独的线程池。
https://stackoverflow.com/questions/15527753
复制相似问题