В примере unary RPC
, предоставленном в grpc Github ( client ) и ( server ), есть ли способ обнаружить закрытое соединение клиента?
Например, в файле server.cc
:
std::string prefix("Hello ");
reply_.set_message(prefix + request_.name());
// And we are done! Let the gRPC runtime know we've finished, using the
// memory address of this instance as the uniquely identifying tag for
// the event.
status_ = FINISH;
int p = 0,i=0;
while(i++ < 1000000000) { // some dummy work
p = p + 10;
}
responder_.Finish(reply_, Status::OK, this);
С помощью этой фиктивной задачи перед отправкой ответа клиенту серверу потребуется несколько секунд. Если мы закроем клиента (например, с помощью Ctrl+C
), сервер не выдаст никакой ошибки. Он просто вызывает Finish
, а затем освобождает объект, как если бы Finish
был успешным.
Есть ли какая-либо функция async
(функция-обработчик) на стороне сервера, чтобы мы получили уведомление о том, что клиент имеетсоединение закрыто или клиент разорван?
Спасибо!