如何处理gRPC客户端间歇性连接/失败/断开连接?

时间:2020-11-08 23:13:53

标签: c++ networking grpc

我正在运行c ++ hello world异步示例。 greeter_async_servergreeter_async_client2

我知道该示例不提供错误处理,但是我找不到关于此主题的任何内容。如果客户端发送消息,然后断开连接或具有间歇性连接,则服务器会将其崩溃。我们如何处理这种情况?

我将如何修改服务器/客户端样板代码以检查客户端状态?这是您过早终止客户端的输出:

客户端输出:(终止控制台可模拟间歇性连接/断开连接)

root@a64893e1b102:/grpc/examples/cpp/helloworld/build# ./greeter_async_client2 
Greeter received: Hello world 9
Greeter received: Hello world 10
Greeter received: Hello world 8
Greeter received: Hello world 7
Greeter received: Hello world 6
Greeter received: Hello world 5
Greeter received: Hello world 4
Greeter received: Hello world 3
Greeter received: Hello world 2
Greeter received: Hello world 1
Greeter received: Hello world 0
Greeter received: Hello world 11
Greeter received: Hello world 12
Greeter received: Hello world 13
^C
root@a64893e1b102:/grpc/examples/cpp/helloworld/build# 

服务器输出:(从客户端终止后,服务器将崩溃。.

root@a64893e1b102:/grpc/examples/cpp/helloworld/build# ./greeter_async_server 
Server listening on 0.0.0.0:50051
E1108 23:00:58.703676900   28202 greeter_async_server.cc:156] assertion failed: ok
Aborted
root@a64893e1b102:/grpc/examples/cpp/helloworld/build# 

更新: 在服务器文件中,我更改了

GPR_ASSERT(ok);

像这样

if(ok){
    // do something
}else{
    std::cout<< "RPC Failed" << std::endl;
}

对于间歇性连接和断开连接,这似乎很好用。但我想把这个问题留给其他建议考虑。

0 个答案:

没有答案