(P47)muduo库使用例子(六):限制服务器最大并发连接数,用Timing wheel踢掉空闲连接

本文介绍了如何通过Muduo库限制服务器的最大并发连接数,并探讨了使用Timingwheel算法踢掉空闲连接的两种方法,包括粗暴的定时器实现和高效的时间轮调度。通过实例和测试,展示了如何维护服务器性能并管理连接资源。
摘要由CSDN通过智能技术生成

1.限制服务器最大并发连接数

  • MuduoManual.pdf P108

  • eg测试:47\jmuduo\examples\maxconnection\main.cc
    47\jmuduo\examples\maxconnection\echo.h
    47\jmuduo\examples\maxconnection\echo.cc

  • 测试:
    回射服务器
    在这里插入图片描述
    回射客户端,使用nc测试
    第一个连接
    在这里插入图片描述
    第二个连接
    在这里插入图片描述
    第三个连接
    在这里插入图片描述

2.用Timing wheel踢掉空闲连接

  • MuduoManual.pdf P122
    (1)粗暴方法1:注册一个每过一秒钟,重复执行的定时器
    EventLoop::runEvery(…);
    每隔一秒钟,执行以下的代码。遍历整个连接列表,判断是否超时,如果超时,就断开。
    foreach(connection int connectionList)
    {
    if ((now - connection.lastReceiveTime) > 8s)
    close(connection);
    }
    (2)粗暴方法2:
    为每个连接注册一个一次性的定时器,超时时间为8s。
    close(connection);
    (3)总结如下:
    如果是8s钟,那么该循环队列就有8个格子(8个桶bucket);
    这个循环队列只有1个尾指针tail;
    尾指针tail同样也需要注册一个1s钟的定时器,而且是重复的定时器,每过1s钟,tail向前移动一格,所以尾指针所指向的位置(即里面的连接),其超时时间就是8s钟;
    若时间轮盘的一个阁子只能存放一个连接的话,那么最多只能支持最多8个并发连接,而我们的并发连接数肯定远远大于8个连接,所以一个阁子存放的连接数不止一个,可以是一个集合。

  • eg测试:47\jmuduo\examples\idleconnection\echo.h
    47\jmuduo\examples\idleconnection\echo.cc
    47\jmuduo\examples\idleconnection\main.cc
    注意数据结构:shared_ptr,weak_ptr;链表,环形缓冲区,hash_set,以及排序链表的使用

  • 测试:
    客户端,超时时间是10s
    在这里插入图片描述
    服务端,处于9,说明是10s超时;tail向前移动connectionBuckets_.push_back(Bucket());,其生命期就变为了9s
    在这里插入图片描述
    在这里插入图片描述
    引用计数=0时,断开连接
    在这里插入图片描述
    此外,一个阁子可以存放多个连接。若开启了2个客户端,则服务端的定时器状态如下,一个阁子可以存放多个连接。
    在这里插入图片描述

  • eg:47\jmuduo\examples\idleconnection\sortedlist.cc

  • 测试:服务器端
    在这里插入图片描述
    在这里插入图片描述
    客户端,使用nc测试
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值