高性能服务器使用libEvent
High-performance server using libEvent
我正在设计一个高性能服务器(不是HTTP服务器),并且正在考虑我的设计选项。服务器应该支持大量的传入连接(成千上万),并且可以在windows和linux上编译。
在windows端,我实现了一个IO Completion Port服务器,到目前为止似乎可以处理压力。由于linux的需求突然出现,我现在试图找到一个跨平台的库,它给了我一种使用线程池的accept/read事件的方法。
到目前为止,libEvent似乎是正确的选择(在这个链接中类似于"示例代码:一个echo服务器")。但是引用libEvent文档中的另一页:如果event_base设置为使用锁定,则访问它是安全的在多个线程之间。它的循环只能在一个线程中运行,然而。如果您想让多个线程轮询IO,您需要为每个线程设置一个event_base。
我的基本设计是有一个线程池响应接受和读取事件。这句话,如果我理解正确的话,是说我不能那样做。
有人有高绩效的经验吗?基于libEvent?我是不是该换个图书馆?
这样一个服务器的示例代码将是完美的
如果您希望保持跨平台,那么libevent
是可行的方法。
如果你想要高效,我会推荐平台特定的API,如IO完成端口(你在Windows上工作)和Linux中的epoll:
注意libevent在Linux内部使用epoll。
关于你的多读设计问题,我希望你不要使用一个线程来处理每个传入的客户端连接…如果您这样做,就会违背使用事件驱动模型的目的!您应该设计代码,使单个线程能够处理少量客户端连接,并随着并发连接数量的增加而增加线程数量。
我也不会对客户端发送到正在执行IO接收数据的线程池中的数据进行任何繁重的计算工作。我将把网络密集型IO任务和CPU密集型计算任务分离到两个单独的线程池
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 从服务器传输到客户端的消息不会出现
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- OpenSSL TLS服务器-使用客户端证书白名单
- 我正在开发服务器,ip作为参数传递不起作用
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- 如何在 Minecraft 服务器上执行命令
- 调试编译的服务器在数据库打开时崩溃
- C++套接字客户端到 Python 服务器未创建连接
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 将相机数据从服务器实时流式传输到客户端
- 为什么创建服务器后C++ httplib 库阻塞了我的主线程?
- 每个服务器请求的内存预算
- 带有libevent的多线程HTTP服务器
- 高性能服务器使用libEvent
- 如果我想要事件驱动的服务器使用libevent或libev