V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
EthanDon
V2EX  ›  程序员

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

  •  
  •   EthanDon · 2019-07-09 10:52:50 +08:00 · 2487 次点击
    这是一个创建于 1750 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    12 条回复    2019-07-09 11:20:12 +08:00
    micean
        1
    micean  
       2019-07-09 11:00:30 +08:00
    websocket
    firefffffffffly
        2
    firefffffffffly  
       2019-07-09 11:04:07 +08:00
    http2 多路复用解决了这个问题
    EthanDon
        3
    EthanDon  
    OP
       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
        4
    misaka19000  
       2019-07-09 11:07:49 +08:00
    当然可以了,不然反复创建 TCP 连接多耗费资源
    EthanDon
        5
    EthanDon  
    OP
       2019-07-09 11:08:28 +08:00
    @misaka19000 那我再翻翻 go 的库
    misaka19000
        6
    misaka19000  
       2019-07-09 11:08:35 +08:00
    TCP 连接是否可以复用:可以
    连接是否是全双工:不是
    morethansean
        7
    morethansean  
       2019-07-09 11:09:34 +08:00 via iPhone
    听你的需求,感觉你客户端发数据不需要长连接啊。早期讲长连接多是用在服务器推送数据,比如聊天室之类的。
    EthanDon
        8
    EthanDon  
    OP
       2019-07-09 11:12:22 +08:00
    @morethansean 客户端和服务器是我自己抽象的,其实是主程序和子程序,两个部分的程序通信。
    我好像找到问题在哪里了,太笨了。。。
    huskar
        9
    huskar  
       2019-07-09 11:12:22 +08:00
    @EthanDon http1 使用 keep-alive 后可以复用一个 tcp 连接多次发送请求。但是请求是同步的,即客户端发送一个 request,必须等到服务器的 response 才能发送下一个请求。HTTP2 可以异步发送多个请求。
    AngryPanda
        10
    AngryPanda  
       2019-07-09 11:12:30 +08:00
    @firefffffffffly HTTP 多路复用也不是解决这个全双工通信的问题
    micean
        11
    micean  
       2019-07-09 11:19:06 +08:00
    @EthanDon
    连接是可以复用一个,但是协议要求一次请求一次响应
    momocraft
        12
    momocraft  
       2019-07-09 11:20:12 +08:00
    为什么不是双工就不是长连接了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1000 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:02 · PVG 04:02 · LAX 13:02 · JFK 16:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.