muduo限制服务器的最大并发数
来源:互联网 发布:巨人网络借壳上市分析 编辑:程序博客网 时间:2024/05/22 03:52
服务器的文件描述符数量有限,因此需要一些手段来限制服务器的最大并发连接数。
需要这么做的原因是:
考虑一种情况:
某个时刻服务器文件描述符已经用完了,此时再来一个连接,将无法用描述符表示这个连接,也就无法关闭这个连接。在Reactor模式下,POLLIN
事件就会一直被触发(level trigger模式),就会进入busy loop,cpu 利用率将到达100%。
因此有必要设计一个策略,当服务器并发数目到达上限时,主动的拒接连接。
muduo使用的办法很巧妙:
1.准备一个空闲的描述符
2.当遇到上述情况时,先close掉这个空闲的文件描述符,这样就多出一个可用描述符
3.接收新的连接后就有文件描述符来表示这个连接了。
4.此时close掉这个描述符,就关掉了客户端连接
5.再次打开这个空闲的描述符。
如何在muduo中限制并发连接数,以echoserver为例,只需简单设置一个计数器和最大连接数限制即可。
diff examples/simple/echo/echo.h examples/maxconnection/echo.h -u
--- examples/simple/echo/echo.h 2016-09-29 21:46:12.946963506 +0800+++ examples/maxconnection/echo.h 2016-06-21 16:09:03.366311441 +0800@@ -6,20 +6,23 @@ // RFC 862 class EchoServer {- public:- EchoServer(muduo::net::EventLoop* loop,- const muduo::net::InetAddress& listenAddr);+ public:+ EchoServer(muduo::net::EventLoop* loop,+ const muduo::net::InetAddress& listenAddr,+ int maxConnections);- void start(); // calls server_.start();+ void start();- private:- void onConnection(const muduo::net::TcpConnectionPtr& conn);+ private:+ void onConnection(const muduo::net::TcpConnectionPtr& conn);- void onMessage(const muduo::net::TcpConnectionPtr& conn,- muduo::net::Buffer* buf,- muduo::Timestamp time);+ void onMessage(const muduo::net::TcpConnectionPtr& conn,+ muduo::net::Buffer* buf,+ muduo::Timestamp time);- muduo::net::TcpServer server_;+ muduo::net::TcpServer server_;+ int numConnected_; // should be atomic_int+ const int kMaxConnections_; }; #endif // MUDUO_EXAMPLES_SIMPLE_ECHO_ECHO_H
测试结果如下:
./maxconnection_echo 3 #设置最大并发数3
在终端用nc
工具连接测试,结果如下,当超出限制后,将自动踢掉连接:
参考:
Linux多线程 服务端编程 使用muduo C++ 网络库
1 0
- muduo限制服务器的最大并发数
- Muduo 网络编程示例之六:限制服务器的最大并发连接数
- 读书笔记-限制服务器最大并发连接数的方法
- 限制服务器最大并发连接数(47)
- 常见浏览器的最大并发数限制
- 使用Filter限制J2EE最大并发数
- 测试服务器的最大并发的连接数
- 如何限制Samba服务中一个共享的最大并发连接数?
- Linux下高并发socket最大连接数所受的各种限制
- Linux下高并发socket最大连接数所受的限制问题
- Linux下高并发socket最大连接数所受的限制问题
- Linux下高并发socket最大连接数所受的限制问题
- Linux下高并发socket最大连接数所受的各种限制
- Linux下高并发socket最大连接数所受的各种限制
- Linux下高并发socket最大连接数所受的各种限制
- Linux下高并发socket最大连接数所受的各种限制
- Linux下高并发socket最大连接数所受的各种限制
- Linux下高并发socket最大连接数所受的各种限制
- scrapy 初体验
- Template 模块模式
- 20161116
- 安装完ubuntu双系统进不了windows
- 关于取消高亮的方法
- muduo限制服务器的最大并发数
- Windows 下 Outlook 2016 点击X号最小化和开机自动运行
- 【备忘】【C4】 《Java语言程序设计:基础篇(原书第8版)》PDF 下载
- Struts2中与Servlet API进行耦合获取servlet中的application,session,request对象
- 小感悟
- How to Install MongoDB on CentOS7 Gracefully
- java多线程之创建线程的两种传统方式
- 溢出(http://www.gdutcode.sinaapp.com/problem.php?id=1190)
- Java_类_权限修饰符