对应《GRPC-C++源码分析(三)--main线程》中的1.1节 初始化ServerCompletionQueue 1 overview 先来看下ServerCompletionQueue的整体结构
如果整个2.1节都没理解也没关系,记住我们有了一个grpc_event_engine_vtable* g_event_engine指针就可以了,这个指针的内容就是上面的static const grpc_event_engine_vtable vtable
先看PollForWork部分逻辑,PollForWork在for循环中epoll_wait等待client链接
对应《GRPC-C++源码分析(三)--main线程》中1.6节 这一节可能才是最核心的部分,包括大家理解的怎样注册listen和accept描述符,怎样处理读写事件,怎样处理业务逻辑等等。 grpc_core::Executor::Scheduler(grpc_core::ExecutorJobType::SHORT)), GRPC_ERROR_NONE); 这块代码对应了《GRPC-C 跟踪下grpc_core::Executor::Scheduler可以清晰看到最终调用的是grpc_closure_list_append方法 grpc_server_start-2.jpg 《GRPC-C
对应《GRPC-C++源码分析(三)--main线程》中的1.2节 创建Server std::unique_ptr<Server> server(new Server( max_receive_message_size
对应于《GRPC-C++源码分析(三)--main线程》中1.3节和1.4节 1 grpc_server_register_completion_queue for (auto it = sync_server_cqs
GRPC C++部分的源码分析暂时写到这里,后面的分析比较粗糙,我自己也觉得不满意,但限于时间,只能先到这儿了。等闲下来时候或许会把缺失的细节补上。同时也非常欢迎有感兴趣的同学前来补充(可以申请成为此专栏的合作者)。
对应于《GRPC-C++源码分析(三)--main线程》中1.5节 for (auto port = ports_.begin(); port !
2.2节中已经看到g_core_codegen_interface的初始化,grpc_completion_queue_factory_lookup在父类CoreCodegenInterface中是个纯虚函数,具体实现在CoreCodegen类中
如果没有特殊喜好,推荐从example/cpp/helloworld/greeter_server.cc开始阅读。前期分析的是同步部分的代码。
1.1 server_start_listener 这个函数完成了epoll的创建,listen描述符的注册 grpc_server_start-3.jpg server_start_listener最终调用的是tcp_server_start 分段解释下tcp_server_start //tcp_server_posix.cc static void tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollsets,
接着从线程模型的角度再来认识grpc。先上图 grpc-thread线程模型.jpg 图中绿色的方框代表线程 红色虚线表示新线程的创建 红色方框是公共的list 蓝色字体的方框是“关键字”,标示了第一章网络模型中出现的关键字,方便一一对应 DoWork是逻辑处理模块 main是主线程,完成了描述符的bind和listen。创建了两个执行线程default-excutor和reslover-excutor,创建了一个epoll_wait线程SyncRequestThreadManager,SyncReque
先忽略sync_requests_部分,后边再说,重点看Initialize()里的实现。这里分两部分说,第一部分说整个框架逻辑,第二部分分析具体函数调用逻辑。
3.2.1 cq初始化 cq = static_cast<grpc_completion_queue*>( gpr_zalloc(sizeof(grpc_completion_queue) + vtable->data_size + poller_vtable->size())); vtable->data_size为 sizeof(cq_next_data) poller_vtable->size为 grpc_pollset_size 稍微解释下grpc_
3.3 小结 还是回到开头CompletionQueue类的构造函数 CompletionQueue(const grpc_completion_queue_attributes& attributes) { cq_ = g_core_codegen_interface->grpc_completion_queue_create( g_core_codegen_interface->grpc_completion_queue_factory_lookup(
做rpc选型时候,有人说到grpc,想在网上找一些grpc c/c++的源码分析来帮助理解,发现除了官方doc里带的文档外寥寥无几(也可能是自己没找到?)。只能自己捋起袖子“啃一啃”grpc的源码。