ceph 网络模块 源码分析 三
第一篇和第二篇主要讲了ceph网络模块的基材框架:Messenger和Dispatcher.本篇主要讲解下Messenger的主要实现方式之一: SimpleMessenger,它也是目前最稳定的也,应用于生产环境的实现.
SimpleMessenger
Messenger是一个接口,它定义的了消息发送和接受的等各种接口.SimpleMessenger是Messenger的一个具体实现,它由三个重要的模块组成:
- Accepter: 负责监听客户端连接请求
- DispatchQueue: 接收消息的缓冲队列
- Pipe: 负责具体的接受和发送消息
Accepter
Accepter比较简单,它继承自Thread类,主要负责监听客户端的连接请求.它有两个重要函数bind()和entry().前者负责socket的创建,绑定和监听.后者使用poll监听socket上的请求连接,如果有新请求到来,那么调用Messenger的add_accept_pipe(sd)把socket传递给Pipe,用于数据通信.
int Accepter::bind(const entity_addr_t &bind_addr, const set&