本节处理消息的接收。消息的接收是被动事件,易于处理。
首先讲解用户的消息处理函数注册过程。
用户需要自己注册自己的消息接收处理函数。例如下面这样的消息回调函数。
void onMessage(const muduo::TcpConnectionPtr& conn,
muduo::Buffer* buf,
muduo::Timestamp receiveTime)
{
printf("onMessage(): tid=%d received %zd bytes from connection [%s] at %s\n",
muduo::CurrentThread::tid(),
buf->readableBytes(),
conn->name().c_str(),
receiveTime.toFormattedString().c_str());
buf->retrieveAll();
}
接着需要在TcpServer上注册函数,例如下面这样的写法。
muduo::TcpServer server(&loop, listenAddr);
server.setMessageCallback(onMessage);
那么我们注册消息接收回调函数是被注册到哪里了呢?
首先这个回调函数设置为了TcpServer的一个数据成员。
void setMessageCallback(const MessageCallback& cb)
{ messageCallback_ = cb; }
然后在连接建立时,将这个数据成员注册为TcpConnection的

本文深入分析Muduo网络库中如何接收和处理消息。用户通过注册回调函数来处理接收到的数据,这些函数被设置为TcpServer和TcpConnection的数据成员。在连接建立时,回调函数会被注册到TcpConnection,并关联到对应的channel。当发生可读事件时,TcpConnection读取数据到Buffer,并调用用户回调进行处理。Buffer在非阻塞IO设计中扮演关键角色。
最低0.47元/天 解锁文章

1425

被折叠的 条评论
为什么被折叠?



