我有一个与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();