这段代码实现了一个 gRPC 服务器的线程,其作用是处理客户端发起的 RPC 请求。具体实现过程如下:
- 构建 gRPC 服务器
首先,该函数会构建一个 grpc::ServerBuilder 对象,并且设置监听地址和端口以及安全凭证(这里使用的是 InsecureServerCredentials)。然后,将该服务注册到 builder 中,并添加一些 ChannelArgument。
- 定义 RPC 处理函数
接着,需要定义一系列的 RPC 处理函数,包括 GetCapabilities、CreateCandidate 等,这些函数都是通过宏 REQUEST_NEWRPC 和 REQUEST_NEWRPC_STREAMING 定义的。这里需要注意的是,每个 RPC 函数都会传递一个 RpcStateBase 指针,表示当前请求的状态,可以在处理函数中获取请求参数,进行业务逻辑处理,并返回结果。
- 处理 RPC 请求
最后,需要进入一个 while 循环,不断从 completion queue(cq)中获取下一个 RPC 请求。如果 cq 中没有请求,则跳出循环。如果获取成功,就调用 rpc->run() 函数,这个函数会根据请求类型(unary 或 streaming),调用相应的处理函数进行业务逻辑处理。如果请求已经结束,就释放 rpc 占用的内存空间,避免内存泄漏。
- 关闭服务器
当所有请求处理完毕后,需要关闭服务器并释放相关资源。具体实现方式是调用 server->Shutdown() 函数和 cq->Shutdown() 函数来停止服务器和 completion queue 的运行,并且循环遍历 cq 中的所有 RPC 请求并释放它们占用的内存空间。最后退出线程。




