http/http2 支持双工?

发布于 2022-09-03 19:31:34 字数 359 浏览 13 评论 0

http/http2 支持双工?

我们知道nio支持读写事件,那么http如果定义特殊的Content Type ,如 dstream

那么在服务器接受到该类型的http请求的时候,可以立即响应数据,如离线存储的聊天记录,并且保持读取客户端的请求,如发送的聊天消息。

客户端也采用nio实现,用来读取和写入聊天数据。那么,是否这样子,http协议就支持双向数据流

如果是,那么,为何没有人使用该模式?如果不是,那么htyp2呢?貌似gRPC就是这么干的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

§对你不离不弃 2022-09-10 19:31:34

http 是基于 tcp 的,当然是双工。
你应该理解双工的两种模式:半双工(http 1.0/1.1),全双工(http 2.0)。

半双工:同一时间内,链接上只能有一方发送数据,另一方接受数据。
http 1.0 是短连接模式,每个请求都要建立新的 tcp 连接,然后 C 发送,S 响应,断开,下一个请求重复此步骤。
http 1.1 是长连接模式,可以多路复用,建立 tcp 连接,资源1 C 发送,S响应,资源2 C发送 S响应,资源3 C发送 S响应,免去了要为每个资源都建立一次 tcp 的开销。

全双工:同一时间内,两端都可以发送或接受数据
http 2.0 资源1 C发送,不必等待 S响应就可以继续发送 资源2 的请求,可以并发的发送,一边发,一边收。

江南月 2022-09-10 19:31:34

HTTP协议明确规定了报文的流动方向,永远都是一问一答的模式,在HTTP/1.1,即使有多路复用,这条TCP通道也已经限定了两端的角色。
理论上可以通过开两条通道,在通道1,A端是客户端B端是服务器,在通道2,A端是服务器B端是客户端,通过这种方式也能实现双向数据流。
但有一个非常现实的问题……你的客户端可能并不会暴露在公网中,如果强行要做到这一步……就会引入更大的一个问题:NAT穿透。

所以实际上最简单的办法就是双方建立一个TCP连接然后在TCP基础上进行封装以满足自身需求,如果是web前端,可能会使用websocket。

----------以上为HTTP1.1的境况--------------

HTTP/2理论上没有什么改观,但是由于有server push的存在,实际上你可以用它实现推送,也就是双向数据流了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文