设为首页 加入收藏

TOP

Muduo网络编程示例之八:用 Timing wheel 踢掉空闲连接(二)
2014-11-23 22:03:57 来源: 作者: 【 】 浏览:4
Tags:Muduo 网络编程 示例 Timing wheel 空闲 连接
Callback(
boost::bind(&EchoServer::onMessage, this, _1, _2, _3));
loop->runEvery(1.0, boost::bind(&EchoServer::onTimer, this));
connectionBuckets_.resize(idleSeconds);
}
其中 EchoServer::onTimer() 的实现只有一行:往队尾添加一个空的 Bucket,这样 circular_buffer 会自动弹出队首的 Bucket,并析构之。在析构 Bucket 的时候,会依次析构其中的 EntryPtr 对象,这样 Entry 的引用计数就不用我们去操心,C++ 的值语意会帮我们搞定一切。

void EchoServer::onTimer()
{
connectionBuckets_.push_back(Bucket());
}
在连接建立时,创建一个 Entry 对象,把它放到 timing wheel 的队尾。另外,我们还需要把 Entry 的弱引用保存到 TcpConnection 的 context 里,因为在收到数据的时候还要用到 Entry。(思考题:如果 TcpConnection::setContext 保存的是强引用 EntryPtr,会出现什么情况?)

void EchoServer::onConnection(const TcpConnectionPtr& conn)
{
LOG_INFO << "EchoServer - " << conn->peerAddress().toHostPort() << " -> "
<< conn->localAddress().toHostPort() << " is

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Muduo网络编程示例之七:“串并转.. 下一篇Muduo网络编程示例之九:简单的消..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: