检测grpc服务器中关闭的客户端连接
detect client connection closed in the grpc server
在grpc-Github(客户端(和(服务器(中提供的unary RPC
示例中,是否有任何方法可以检测客户端的关闭连接?
例如,在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
功能(处理程序函数(来通知我们客户端已关闭连接或客户端已终止?
谢谢!
不幸的是,没有。
但现在gRPC团队的成员正在努力将回调机制实现到C++实现中。据我所知,它将以与Java实现相同的方式工作(https://youtu.be/5tmPvSe7xXQ?t=1843(。
您可以通过以下示例了解如何使用未来的API:client_callback.cc和server_callback.ch
您感兴趣的是服务器端::grpc::experimental
命名空间中的ServerBidiReactor
类。它有OnDone
和OnCancel
通知方法,可能会对您有所帮助。
另一个有趣的地方是,您可以存储指向连接对象的指针,并随时向客户端发送通知。
但它仍然有很多问题,我不建议在生产代码中使用这个API。您可以在那里看到C++回调实现的当前进展:https://github.com/grpc/grpc/projects/12#card-12554506
相关文章:
- 检测grpc服务器中关闭的客户端连接
- 如何将请求的客户端连接的 IP 与 QTcpSocket 类中识别的 IP 之一进行比较?
- 如何在客户端连接时在QT中更新QGraphicsView
- 在使用 Poll() 的 TCP 服务器 - 客户端连接中,我是否需要手动设置事件?我从来没有到达 POLLOUT 来写
- COM 客户端连接 COM 服务器所需的文件是什么(进程外方案)
- Apache Thrift C++服务器超时客户端连接
- QJSONRPC 中的客户端连接/断开连接事件
- 从一个客户端连接两个套接字
- 聊天应用程序-从客户端连接到服务器时出现故障
- Boost.asio服务器客户端.连接2台计算机
- 处理客户端连接的最有效方法(套接字编程)
- 在Windows下处理多个客户端连接的最佳方法(不使用线程)
- 视觉对象 我的客户端连接类出了什么问题?C++
- 多线程服务器在不等待客户端连接的情况下退出
- boost::asio客户端连接停止接收数据
- 增强多个客户端连接
- 当客户端连接越来越少的时候(在linux上使用套接字编程),服务器监听的明智方法是什么?
- c++的提升.Asio服务器和客户端连接理解
- 关闭阻塞客户端连接webscokettpp客户端从c# UI应用程序
- 如何使gRPC服务器只支持一个客户端连接