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

gRPC客户端流是如何实现的

宋腾
2023-03-14

gRPC客户端流媒体/双向流媒体是如何使用HTTP/2实现的
服务器流媒体是有意义的,因为它可以利用服务器推送来发送对请求的多个响应,但我不清楚它如何像通过websocket那样通过HTTP/2进行双向消息传递。

共有1个答案

孟鸿朗
2023-03-14

gRPC将流编码为HTTP体。每条消息前都有一个五字节的报头,由消息长度和一个标志字节组成。它不使用服务器推送或其他特定于HTTP/2的流媒体功能

gRPC的核心是流媒体。一元(单请求、单响应)和服务器流(单请求)只是生成更干净的API或更优化的I/O行为的特例。但在网络上,一切看起来都和流媒体一样。

HTTP/1规范允许但不要求流式连接和双向连接,但一些实现不支持它们。但由于HTTP/2的性质,不支持它们通常需要做更多的工作。此外,没有十年历史的HTTP/2代理会导致兼容性问题;gRPC能够与HTTP/2生态系统合作,以鼓励支持流媒体。

有关gRPC编码的更多信息,请参阅gRPC的协议HTTP2。md,尤其是长度前缀消息

 类似资料:
  • 我在Go中编写了一个示例gRPC客户端服务器,两者都是为服务器身份验证的TLS配置的。 客户端gRPC调用成功,给我的印象是TLS配置正确,否则,如果TLS握手失败,我希望客户端失败,不会发出gRPC请求(即,不会默认为明文)。 然而,当我将Wireshark连接到该网络以嗅探TCP数据包时,得到的结果让我感到困惑。我没有看到任何TLS数据包,例如,我没有看到TLS客户端HELLO数据包。 这是因

  • 当我运行我的gRPC客户端,它试图将请求流式传输到服务器时,我收到了这个错误:"TypeError: has typelist_iterator,但期望其中之一:bytes, unicode" 我需要以某种方式对我发送的文本进行编码吗?错误消息有一定的意义,因为我肯定是在传入一个迭代器。我从gRPC留档中假设这是需要的。(https://grpc.io/docs/tutorials/basic/p

  • 我们的用例是提出大量请求。每个请求返回1MB的数据。现在,在客户端,我们创建一个GRPC通道,并在循环中运行以下函数 我的问题是在python中如何创建grpc客户端连接池以获得更好的吞吐量? 在golang我看到了这个https://godoc.org/google.golang.org/api/option#WithGRPCConnectionPool但是我很难在python中找到文档。 py

  • 我在HAproxy和客户端流式rpc java maven后面有一个grpc Nodejs服务器。 当我运行java客户端时,它返回一个错误: 伊奥。grpc。StatusRuntimeException:不可用:HTTP状态代码503无效内容类型:文本/html标题:元数据(:status=503,cache control=no cache,content type=text/html)数据-

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