程序员开发实例大全宝库

网站首页 > 编程文章 正文

GRPC-C++源码分析(六)--Server-Register

zazugpt 2025-04-27 17:30:08 编程文章 11 ℃ 0 评论

1 server

对应《GRPC-C++源码分析(二)--main函数主要流程》中的1.2节 创建Server

  std::unique_ptr<Server> server(new Server(
      max_receive_message_size_, &args, sync_server_cqs,
      sync_server_settings_.min_pollers, sync_server_settings_.max_pollers,
      sync_server_settings_.cq_timeout_msec, resource_quota_,
      std::move(interceptor_creators_)));
  • sync_server_cqs作为参数传到了Server构造函数中,赋给了sync_server_cqs_

在Server的构造函数中填充了sync_req_mgrs_

    for (const auto& it : *sync_server_cqs_) {
      sync_req_mgrs_.emplace_back(new SyncRequestThreadManager(
          this, it.get(), global_callbacks_, server_rq, min_pollers,
          max_pollers, sync_cq_timeout_msec));
    }
  • 注意sync_server_cqs_作为参数传到了SyncRequestThreadManager构造函数中,赋给了server_cq_,这个server_cq_会在后面用到

在Server的构造函数中生成了grpc_server* server_;

server_ = grpc_server_create(&channel_args, nullptr);
  • 这里的server_会在稍后的grpc_server_register_completion_queue方法中用到

2 Register

对应于《GRPC-C++源码分析(三)--main函数主要流程》中1.3节和1.4节

2.1 grpc_server_register_completion_queue

  for (auto it = sync_server_cqs->begin(); it != sync_server_cqs->end(); ++it) {
    grpc_server_register_completion_queue(server->server_, (*it)->cq(),
                                          nullptr);
    has_frequently_polled_cqs = true;
  }


  • 将sync_server_cqs中每个ServerCompletionQueue类中的cq_指针放到Server中的grpc_completion_queue** cqs指针数组中

2.2 RegisterService

  for (auto service = services_.begin(); service != services_.end();
       service++) {
    if (!server->RegisterService((*service)->host.get(), (*service)->service)) {
      return nullptr;
    }
  }
  • 注册service得从/grpc/examples/cpp/helloworld/greeter_server.cc说起


  • 这块逻辑关注的是methods_里的东西来自什么地方
  • 在greeter_server.cc文件中声明GreeterServiceImpl service时,便调用了其父类Greeter::Service的构造方法,利用AddMethod方法将具体的method放到了methods_中
  • 在Server调用RegisterService时,会把这些method放到sync_req_mgrs_里的每一个SyncRequestThreadManager中,目前先了解到这里就可以,后面看到具体使用的地方我们再继续

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表