muduo 学习
设计目标
muduo的设计目标是专用的数独服务器或者游戏服务器,不是用来写通用的httpd或者ftpd或Web proxy。前者通常有业务逻辑,后者更强调高并发和高吞吐量。
原理
muduo支持并发非阻塞TCP网络编程,它的核心是每个IO线程一个事件循环(loop),把IO事件分发到回调函数上。
基于事件的非阻塞网络编程
- 接收数据(receive):注册一个收数据的回调,网络库收到数据时调用回调函数,将收到的数据提供给我。
- 接受连接(accept)
- 发送数据(send)
TCP网络编程最本质的是处理三个半事件
- 连接建立。onConnection()
- 连接断开:主动断开(close--关闭套接字, shutdown--关闭连接)和被动断开(read返回0)。
- 消息到达,文件描述符可读。onMessage() 处理收到的数据
- 消息发送完毕(指数据写入操作系统的缓冲区,等待TCP协议栈完成数据的发送与重传) onWriteComplete()
应用层发送缓冲区
应用层接收缓冲区
长连接TCP服务,分包
- 消息长度固定
- 特殊字符作为消息边界
- 消息头部加长度字段
- 根据消息本身格式分包(JSON、XML配对)
-------------------------------------------------------------逆水行舟,不进则退。