Learn muduo - Part 7 Programming Demo with muduo
本系列是 《Linux 多线程服务端编程:使用 muduo C++ 网络库》 学习笔记。
Part 7: muduo 编程示例
shutdown 和 close 区别
TCP 协议是全双工协议,同一文件描述符即可读又可写。
::shutdown(sockfd, SHUT_WR)
关闭了写连接,保留读连接。::close(sockfd)
就不能读写了。
Protobuf 反射
根据 class name new object:
1 |
|
用 timing wheel 踢掉空闲连接
简单理解:std::vector<std::unordered_set<std::weak_ptr<Connection>> wheel
wheel.size
为指定的断开空闲连接的超时时间。- 每过 1s 踢掉
wheel[i]
里的 Connection,然后 i 递增,实际为i = (i + 1) % wheel.size()
。 - 踢掉连接操作:
connection.lock()
先尝试升级为std::shared_ptr<Connection>
,升级成功再close()
,否则忽略。此举是为了避免在wheel
中保存std::shared_ptr<Connection>
而延长本应直接 close 的连接。 - 假如某个连接产生数据交互,将其从 wheel 原格子中取出并放入最新时间对应的格子。
Learn muduo - Part 7 Programming Demo with muduo
http://wasprime.github.io/Dev/Library/muduo/Learn-muduo-Part-7-Programming-Demo-with-muduo/