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

HTTP/2客户端可以通过在双向流RPC中发送头帧来终止流吗?

卫琛
2023-03-14

假设我们有一个双向流RPC,其中客户端发送多个请求消息(即多个数据帧),服务器用多个响应消息(即多个数据帧)进行应答。

据我所知,当RPC完成时,服务器通常会发送一个带有状态标头的标头帧,以及一些可能的尾部标头,如grpc status和grpc message,以标记请求/响应交换的完成。

我的问题是,假设服务器发送了错误的响应消息,客户端是否可以发送带有grpc状态和grpc消息头的头帧来传递有关错误的信息。

我问这个问题的原因是因为在c服务器代码(从协议定义生成)中,我正在努力寻找一种方法来获取客户端发送的最后一个HEADER帧,以验证grpc-status和grpc-news标头的值。

此外,在完成grpc项目中的单元测试后,似乎只有服务器返回RPC的状态,这进一步引起了怀疑。

然而,我能够从客户端发送HEADER帧,但基于上述,我不确定这是否是正确的行为,即使我能够做到这一点。

如果有人能为我澄清这一点,我将不胜感激,因为我对HTTP/2和gRPC相当陌生。

共有1个答案

公孙高轩
2023-03-14

此外,在完成grpc项目中的单元测试后,似乎只有服务器返回RPC的状态,这进一步引起了怀疑。

正确!在gRPC中,服务器负责使用状态和可选的尾随元数据终止RPC。客户端从不向服务器发送状态。客户端可以指示它已完成在没有状态的流中发送(这在内部通过发送一个设置了END_STREAM标志的空数据帧来实现,但用户不需要关心此细节)。客户端仅在RPC开始时发送HEADER帧。

 类似资料:
  • 问题内容: 我只能在用户的套接字ID直接存储在io.sockets.on(’connect’)函数中时向用户发出消息。我不知道为什么在登录后尝试存储其套接字ID时为什么不起作用。 加工: 无法运作: JavaScript客户端代码段 解决方案:感谢@alessioalex, 我不得不从登录页面中删除对socket.io的引用,并将以下内容添加到io.sockets.on(’connection’)

  • 我正在尝试在Netty中开始使用HTTP/2。我尝试了“hello world”示例,它按预期工作。在示例中,管道如下所示: 服务器: SslHandler 应用程序协议协商处理程序 Http2ConnectionHandler 客户: SslHandler 应用程序协议协商处理程序 HttpToHttp2ConnectionHandler

  • 问题 你想通过网络提供持续的服务,与客户保持持续的联系。 解决方案 创建一个双向 TCP 客户机。 在 Node.js 中 net = require 'net' domain = 'localhost' port = 9001 ping = (socket, delay) -> console.log "Pinging server" socket.write "Ping"

  • 我正在从服务器向客户端发送自定义web套接字帧。我成功地实现了无缝握手,但发送常规文本帧会给我带来问题(客户端的消息未被接收)。这是我发送的: 数据发送正确(握手成功,jj值为6)。我的代码基于这里的解释,如何在服务器端发送和接收WebSocket消息?。 我的客户非常简单,我只是为了完成发布: 我从客户端获得的Web套接字版本是13。 知道为什么握手有效而普通文本无效吗?

  • 问题内容: 一些背景: 我正在尝试在android应用程序上开发与语音相关的功能,用户可以在其中使用语音进行搜索,并且服务器在用户讲话时会发送中间结果(依次更新UI),并在查询完成后发送最终结果。由于服务器仅接受HTTP / 2单套接字连接,而Android HTTPUrlConnection 尚不支持 HTTP / 2,因此我正在使用Retrofit2。 我已经看过了这个,这个和这个,但是每个示

  • 我后来理解对了。实际上,我需要一条来自android客户端的MQTT消息发送到所有其他客户端,所以我想在消息正文中包含publish关键字,这是非常错误的。MQTT本身将接收到的消息发送给所有提供的客户端,如果客户端订阅了该主题的话。