当没有客户端调用时,我如何让grpc服务器做其他工作



我有一个由grpc提供的简单功能,该服务的启动方法如下:

void start_server() {
string addr("0.0.0.0:50002");
ImageServiceImpl service;
ServerBuilder builder;
builder.AddListeningPort(addr, grpc::InsecureServerCredentials());
builder.RegisterService(&service);
builder.SetMaxSendMessageSize(1L << 31);
builder.SetMaxReceiveMessageSize(1L << 31);
std::unique_ptr<grpc::Server> server(builder.BuildAndStart());
std::cout << "service started, listening to: " << addr << std::endl;
server->Wait();
}

这是一个标准的grpc服务器。我的问题是,当没有调用客户端请求时,我需要服务器来执行其他程序。当客户端请求到来时,服务器程序将被"中断",服务器将处理该请求。处理完请求后,服务器继续执行其"休闲时间"程序。问题是程序会在server->Wait()阻塞,因此当没有客户端请求时,服务器只能等待,这不是我需要它做的

我希望我已经清楚地表达了自己。我怎么能用grpc做到这一点?

server->Wait()之前运行线程是否不能解决此问题?在…上NET C#,我这样解决了它:

...
// Start other work
MainTask mainTask = new MainTask(configurator, _gRPCManager);
Thread mainThread = new Thread(mainTask.Run);
mainThread.IsBackground = true;
mainThread.Start();
// Start gRPS
CreateHostBuilder(args, configurator).Build().Run();

最新更新