我正在运行c ++ hello world异步示例。 greeter_async_server和greeter_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;
}
对于间歇性连接和断开连接,这似乎很好用。但我想把这个问题留给其他建议考虑。