grpc_server
宏定义
首先定义了两种宏
|
|
|
|
其中嵌套的宏定义如下:
|
|
其中的 ServerCallFactory 是一个虚类
|
|
实际使用的实现类是 ServerCallFactoryImpl, 如下:
|
|
所以我们可以得到,比如 RPC_SERVICE_HANDLER(CoreWorkerService, PushTask, -1)
经过宏定义后解析的代码为:
|
|
宏 RAY_CORE_WORKER_RPC_HANDLERS
的使用在类 CoreWorkerGrpcService 中
|
|
在我们解析后的代码中,出现的 service_, 定义位于类 CoreWorkerService 中。其实解析代码里面就是做了,声明一个 ServerCallFactoryImpl 类的实例,然后将该实例的
智能指针传递给容器 server_call_factories (std::vector<std::unique_ptr
其中构建ServerCallFactoryImpl 类的实例传入的参数,&CoreWorkerService::AsyncService::RequestPushTask , &CoreWorkerServiceHandler::HandlePushTask 分别来至:
CoreWorkerService::AsyncService::RequestPushTask 来自 protocol 编译生成的文件 core_worker.grpc.pb.h
中
|
|
&CoreWorkerServiceHandler::HandlePushTask 如下:
|
|
GrpcServer
GrpcServer 类的定义如下:
|
|
在类 GrpcServer 的 Run 函数内关于 service 注册关键代码:
|
|
builder 为 grpc::ServerBuilder, RegisterService 注册 service implementation, 一般都是继承 *::Service*
实现类的实例。
其中services_
的声明如下:
|
|
通过 GrpcServer 里的函数 RegisterService 往 services_ 容器内添加 service.
|
|
通过 RPC 模块,将 CoreWorkerService 内包含的函数的实现都变成了 Handle*
例如, HandlePushTask.