当前位置: 首页 > 知识库问答 >
问题:

如何告诉gRPC客户端告诉gRPC服务器是否已取消?

胥康安
2023-03-14
// server-side code
if (timeout-detected) {
  server_context_->TryCancel();
}
// client-side code
if (client_reader_writer_->Write(&request)) {
  // I consider it connection is still valid
} else {
  // connection decided cancelled. Re-establish connection and do something.
}

共有1个答案

梁学真
2023-03-14

如果您关心的是链接,可以使用Keepalive机制通过定期发送HTTP2 ping来检查信道是否正常,如果没有响应,则认为信道已损坏。

另一种方法是,您还可以提出自己的“心跳”机制,在这种机制中,您可以定期发送心跳,以便在尝试写入套接字时检查服务器/网络故障。

对于典型场景中的服务器超时,可以使用context.abort(grpc.statuscode.deadline_expected,'RPC Time out!')对客户端进行指示

 类似资料:
  • 问题内容: 好的,我觉得我缺少一些关键的信息。 在本地,我有1个主Redis服务器和1个从Redis服务器运行在不同的端口上 http://redis.io/topics/sentinel 我也有3个哨兵,他们似乎彼此了解,并按预期工作。 现在,我有大量的Java代码指向我的主Redis服务器所在的127.0.0.1:6379。 如果我撤下主服务器,哨兵将按预期的方式将奴隶提升为主服务器,因此现在

  • 下面的代码片段显示了如何在gRPC AspNet核心应用程序中启用gRPC web: 客户端应用程序的代码如下所示:

  • 这里是HBase/Hadoop的超级新版本。我启动并运行了一个两节点HBase测试集群,现在我正尝试从一个远程Java客户端连接到该集群。这里是我陷入困境的地方:客户端成功地连接到单服务器Zookeeper仲裁(与HBase主服务器运行在同一服务器上),但是Zookeeper传递回客户端的地址是localhost,而且(很明显)客户端无法连接到任何东西,因为HBase不在本地运行。考虑到由于管理原

  • 我对gRpc很陌生,已经开始探索它们的基础知识(在C语言中)。我想获得有关如何发送心跳以检查客户端/服务器是否仍处于连接状态以及在断开连接时采取恢复措施的指导。任何示例或参考任何文档/文章都将有助于我开始学习。谢谢

  • 将grpc定义的服务视为: 并利用客户端连接到此服务类似于: 如果我们要在一个单独的线程中生成调用,那么处理终止一个永远运行、我们不想再使用的grpc连接的正确方法是什么?是否有任何连接或流控制方法可以调用?

  • 在http p2-spec中,服务器半关闭流(服务器发送了http.END_STREAM),客户端仍然允许发送数据(因为它是半关闭的)。 考虑下面的GRPC场景: 客户端打开bidi-stream到服务器并开始发送数据 服务器关闭响应流并发送状态预告片(转换为发送http.END_STREAM) 客户端继续发送数据 gRPC中是否定义了语义? 可能的方式: 遵循http2规范:允许客户端继续发送服