我正在使用 gRPC 进行 C++ 应用程序(gRPC 服务器)和 Java 应用程序(gRPC 客户端)之间的进程间通信。一切都在一台机器上运行。我想为客户端提供关闭服务器的可能性。我的想法是在 proto 中将 RPC 函数添加到服务中,这样就可以了。
C++ 实现将是:
class Service : public grpcGeneratedService
{
public:
......
private:
grpc::Server* m_pServer;
};
grpc::Status Service::ShutDown(grpc::ServerContext* pContext, const ShutDownRequest* pRequest, ShutDownResponse* pResponse)
{
if (m_pServer)
m_pServer->Shutdown();
return grpc::Status(grpc::StatusCode::OK, "");
}
但是,在处理完所有 RPC 调用之前,ShutDown 会阻塞,这意味着死锁。有什么优雅的方式来实现它吗?