没有客户端调用时如何使grpc服务器执行其他工作?

问题描述 投票:0回答:1

我有一个与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做到这一点?

grpc nonblocking
1个回答
0
投票

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();
© www.soinside.com 2019 - 2024. All rights reserved.