brpc学习

 

前述

只是对一部分源码内容进行记录 随缘

关键函数

GlobalInitializeOrDie

  • 使用场景:
    1. server启动: Start() => StartInternal() => InitializeOnce() => GlobalInitializeOrDie()
    2. server添加服务: AddService() => AddServiceInternal() => InitializeOnce() => GlobalInitializeOrDie()
    3. channel初始化: Init() / InitSingle() => GlobalInitializeOrDie()
  • 函数逻辑: 用pthread_once执行静态函数GlobalInitializeOrDieImpl进行初始化,保证只执行一次

  • GlobalInitializeOrDieImpl内容:
    1. 屏蔽SIGPIPE
    2. 设置GLOG
    3. 初始化openssl库
    4. 设定一些公用内容 如端口、HTTP相关状态方法等
    5. 注册支持的命名空间 如http、https、redis、file、list等
    6. 注册支持的负载均衡算法 如random、rr、murmurhash等
    7. 注册支持的压缩方法 如gzip、zlib、snappy等
    8. 注册支持的协议 如baidu_std、http、h2、redis、rtmp等
    9. 如果是作为客户端调用,需要创建客户端InputMessenger添加协议对应的Handler
    10. 注册并发控制器,用于限制并发数——有ConstantConcurrencyLimiter和AutoConcurrencyLimiter两种
    11. UserCodeBackupPool初始化
    12. 起一个bthread调用GlobalUpdate函数,内部定时更新信息,此线程不会被join,随主进程一起退出