component_bus_daemon.md 1.7 KB

总线篇

总线分两个模块,分别是用于后台分发的daemon实体调用的bus_ept

通过spshell创建一个命名管道作为服务端接收来自模块的连接

初始化流程

服务端

  1. 创建bus_daemon_t对象;

  2. 创建ioqueue_t对象;

  3. 创建接收器;

    1. 对应每个url创建一个daemon_accetpor_t
    2. 分配 ioqueue_overlapped_t*,该结构体定义为32个指针
  4. 接收器绑定重叠IO进行监听,默认是5个

  5. 在Windows上,创建多个线程,用于接收IOCP的事件并对事件根据类型进行处理,因为IO重叠的实现机制,Windows上可以开多个线程处理请求,系统自动会维持调度的平衡。

  6. 一个初始的请求过来即创建一个endpt_session_t,后续进行发送和接收操作

    1. 过来的客户端先加入到未注册列表
    2. 收到BUS_TYPE_ENDPT_REGISTER事件后将其加入到注册列表

客户端

  1. 根据 url对象创建 SOCKET或者管道句柄;
  2. 尝试连接
  3. 发送 BUS_TYPE_ENDPT_REGISTER 注册事件

会话

  • 会话分为注册和未注册两种状态,通过epid进行标识,该标识在从未注册状态转向注册状态时才有效;
  • 新创建的会话处于未注册状态;
  • 每一次会话掉线或者上线(注册)都会通知其他同行Session

通讯方式

  • 管道(TYPE_PIPE)
  • TCP(TYPE_TCP)

接收器(acceptor)

  • 用于初始化会话对象;
  • uri决定了创建接收器的个数和接收器的类型
    • 类型:
    • HANDLE_TYPE_ACCEPTOR
    • HANDLE_TYPE_PIPEACCEPTOR

重叠IO

  • 所有的发送和接收行为都是通过重叠IO异步操作来完成