总线篇
总线分两个模块,分别是用于后台分发的daemon实体调用的bus_ept
通过spshell创建一个命名管道作为服务端接收来自模块的连接
初始化流程
服务端
创建bus_daemon_t对象;
创建ioqueue_t对象;
创建接收器;
- 对应每个url创建一个daemon_accetpor_t
- 分配 ioqueue_overlapped_t*,该结构体定义为32个指针
接收器绑定重叠IO进行监听,默认是5个
在Windows上,创建多个线程,用于接收IOCP的事件并对事件根据类型进行处理,因为IO重叠的实现机制,Windows上可以开多个线程处理请求,系统自动会维持调度的平衡。
一个初始的请求过来即创建一个endpt_session_t,后续进行发送和接收操作
- 过来的客户端先加入到未注册列表
- 收到BUS_TYPE_ENDPT_REGISTER事件后将其加入到注册列表
客户端
- 根据 url对象创建 SOCKET或者管道句柄;
- 尝试连接
- 发送 BUS_TYPE_ENDPT_REGISTER 注册事件
会话
- 会话分为注册和未注册两种状态,通过epid进行标识,该标识在从未注册状态转向注册状态时才有效;
- 新创建的会话处于未注册状态;
- 每一次会话掉线或者上线(注册)都会通知其他同行Session
通讯方式
- 管道(TYPE_PIPE)
- TCP(TYPE_TCP)
接收器(acceptor)
- 用于初始化会话对象;
- uri决定了创建接收器的个数和接收器的类型
- 类型:
- HANDLE_TYPE_ACCEPTOR
- HANDLE_TYPE_PIPEACCEPTOR
重叠IO
- 所有的发送和接收行为都是通过重叠IO异步操作来完成