昨天翻了一天 go 的 api 和网上查阅资料,都没用找到 client 写多次数据的情况。
目前理解的 http 长连接是这样的,客户端发起请求,服务器进行处理,每有数据就返回一点数据,客户端等待连接关闭。也就是请求 / 响应 1,响应 2...响应结束。
昨天看了一篇博客说,http 长连接是伪长连接,http 只提供请求 /响应的通信模式,不提供类似 tcp 的全双工通信。
所以是没有办法客户端发送多次数据的吗?
1
micean 2019-07-09 11:00:30 +08:00
websocket
|
2
firefffffffffly 2019-07-09 11:04:07 +08:00
http2 多路复用解决了这个问题
|
3
EthanDon OP @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 里客户端可以复用同一个连接发送多个请求吗 |
4
misaka19000 2019-07-09 11:07:49 +08:00
当然可以了,不然反复创建 TCP 连接多耗费资源
|
5
EthanDon OP @misaka19000 那我再翻翻 go 的库
|
6
misaka19000 2019-07-09 11:08:35 +08:00
TCP 连接是否可以复用:可以
连接是否是全双工:不是 |
7
morethansean 2019-07-09 11:09:34 +08:00 via iPhone
听你的需求,感觉你客户端发数据不需要长连接啊。早期讲长连接多是用在服务器推送数据,比如聊天室之类的。
|
8
EthanDon OP @morethansean 客户端和服务器是我自己抽象的,其实是主程序和子程序,两个部分的程序通信。
我好像找到问题在哪里了,太笨了。。。 |
9
huskar 2019-07-09 11:12:22 +08:00
@EthanDon http1 使用 keep-alive 后可以复用一个 tcp 连接多次发送请求。但是请求是同步的,即客户端发送一个 request,必须等到服务器的 response 才能发送下一个请求。HTTP2 可以异步发送多个请求。
|
10
AngryPanda 2019-07-09 11:12:30 +08:00
@firefffffffffly HTTP 多路复用也不是解决这个全双工通信的问题
|
12
momocraft 2019-07-09 11:20:12 +08:00
为什么不是双工就不是长连接了
|