确认一下, http 的长连接是不是客户端没法发送二次数据?

2019-07-09 10:52:50 +08:00
 EthanDon

昨天翻了一天 go 的 api 和网上查阅资料,都没用找到 client 写多次数据的情况。

目前理解的 http 长连接是这样的,客户端发起请求,服务器进行处理,每有数据就返回一点数据,客户端等待连接关闭。也就是请求 / 响应 1,响应 2...响应结束。

昨天看了一篇博客说,http 长连接是伪长连接,http 只提供请求 /响应的通信模式,不提供类似 tcp 的全双工通信。

所以是没有办法客户端发送多次数据的吗?

2506 次点击
所在节点    程序员
12 条回复
micean
2019-07-09 11:00:30 +08:00
websocket
firefffffffffly
2019-07-09 11:04:07 +08:00
http2 多路复用解决了这个问题
EthanDon
2019-07-09 11:04:47 +08:00
@micean
>在 HTTP1.1 中进行了改进,使得有一个 keep-alive,也就是说,在一个 HTTP 连接中,可以发送多个 Request,接收多个 Response。但是请记住 Request = Response, 在 HTTP 中永远是这样,也就是说一个 request 只能有一个 response。而且这个 response 也是被动的,不能主动发起。
作者:Ovear
链接: https://www.zhihu.com/question/20215561/answer/40316953
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

搜索 websocket 的时候看到的,所以 http 里客户端可以复用同一个连接发送多个请求吗
misaka19000
2019-07-09 11:07:49 +08:00
当然可以了,不然反复创建 TCP 连接多耗费资源
EthanDon
2019-07-09 11:08:28 +08:00
@misaka19000 那我再翻翻 go 的库
misaka19000
2019-07-09 11:08:35 +08:00
TCP 连接是否可以复用:可以
连接是否是全双工:不是
morethansean
2019-07-09 11:09:34 +08:00
听你的需求,感觉你客户端发数据不需要长连接啊。早期讲长连接多是用在服务器推送数据,比如聊天室之类的。
EthanDon
2019-07-09 11:12:22 +08:00
@morethansean 客户端和服务器是我自己抽象的,其实是主程序和子程序,两个部分的程序通信。
我好像找到问题在哪里了,太笨了。。。
huskar
2019-07-09 11:12:22 +08:00
@EthanDon http1 使用 keep-alive 后可以复用一个 tcp 连接多次发送请求。但是请求是同步的,即客户端发送一个 request,必须等到服务器的 response 才能发送下一个请求。HTTP2 可以异步发送多个请求。
AngryPanda
2019-07-09 11:12:30 +08:00
@firefffffffffly HTTP 多路复用也不是解决这个全双工通信的问题
micean
2019-07-09 11:19:06 +08:00
@EthanDon
连接是可以复用一个,但是协议要求一次请求一次响应
momocraft
2019-07-09 11:20:12 +08:00
为什么不是双工就不是长连接了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/581247

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX