基础组件
i_poll_events
事件接口,处理网络读写事件以及定时器事件
i_pipe_events
管道事件
read_activated:激活读操作
write_activated:激活写操作
hiccuped:暂时停顿,通过从session到socket_base
pipe_terminated :管道结束
io_object_t
可以获取io_thread_t的poller,用于监听句柄的读写以及异常状态
plug方法是获取io_thread的poll
unplug是将poll设置为NULL
poller_t
是不同平台事件驱动的别名,如epoll_t,select_t, pollset_t,poll_t,kqueue_t以及devpoll_t。以epoll_t为例。
其类层次结构为
poller_base_t:主要是管理定时器相关的操作
worker_poller_base_t:单线程poller的基类
object_t
用于线程间的命令发送和接收处理的模板基类
process_command:用于处理命令的模板方法,根据命令类型调用对应的命令处理函数process_xxx。
send_xxx:用于发送命令,最终会调用send_command
own_t
_owner:表示拥有此对象的socket_base_t
_owned:表示socket_base_t拥有的所有对象,socket_base_t也继承了own_t
其中处理命令term_req和term,用于在_owned中的动态分配的对象的释放
mailbox
mailbox的事件是io_thread,用于线程间通过管道来通信
ypipe_base_t
用于线程间通信
i_engine
io线程内用于读写网络数据
stream_engine_base_t:用于socket_stream,如tcp和unix socket的基类
udp_engine_t:用于udp
ws_engine_t/wss_engine_t:用于web socket
zmtp_engine_t:用于处理协议zmtp
raw_engine_t:没有handshake
norm_engine_t:用于NACK-Oriented Reliable Multicast (NORM)传输协议
pgm_receiver_t:用于PGM套接字接收端
pgm_sender_t:用于PGM套接字发送端
i_encoder/i_decoder
用于数据的编解码
encoder_base_t:给编码提供了一个处理框架 ,通过实现了填充输出缓冲区的状态机。_in_progress表示正在处理的消息数据
_buf编码时用于存储编码后的数据,在encode传的参数*data_为NULL时,会使用_buf
_buf_size用于指定_buf缓存的大小
_new_msg_flag标识是否是新消息
_next下一步的状态机
_to_write下一步状态机执行前需要写的数据剩余大小
_write_pos表示数据源
next_step用于设置下一步状态机的数据源,数据大小,以及是否是新消息
session_base_t
管理zmq_socket的连接和通信,主要与engine进行交换数据
socket_base_t
zeromq的socket,在zmq中,被当成一种特殊的”线程“,具有收发命令的功能
engine的处理过程
以stream_engine_base_t为例,其构建了处理tcp发送和接收数据处理的框架
其中编解码器以及_process_msg由子类来指定
接收数据处理
发送数据处理
编码处理
在编码过程中,如果需要写入的数据大小为0,则进入下一阶段,即_next
解码处理
如果解码时数据开始位置为data,则调用_next直到读完
组件关系
tcp发起连接
session和socket_base管道建立
session和socket_base管道通知读写
通知读
通知写