0
RT,现在网页跟服务器通信,有频繁的数据请求,服务器的配置connection:keep-alive,也就是一直在复用一个TCP通道,但是偶尔会出现通信情况极差,不能早要求的时间内返回数据,有没有可能让它保持两个TCP通道让我轮换使用,一个超时可以用另外一个保证传输?(这是一种猜测的尝试,就想问有没有可能实现,不要分析猜测可信度大不大)

3个回答

0

网页内没有这个层面的控制: 浏览器也许有很大的tcp连接池,也许连keep-alive都不管,对网页来说无法区分。

你可以看看websocket。

0
  • 一般不是多路复用吗?

  • 你说的这个业务能不能举一个业务场景的例子呢

0

浏览器的实现层面,目前无法使用JavaScript面向TCP编程,针对这个问题,从几个角度回答一下:

  1. keep-alive是存在timeout的(通常在1分钟内),此后的HTTP请求会通过建立新的TCP链接,进行通信。因此不是高频的通信,keep-alive未必能发挥真正的作用。

  2. 即使是在timeout内的通信,每次HTTP请求的Header都会反复传输,因为HTTP/1.1协议是无状态的。这会导致在高频通信的过程,流量中信息的有效传输率是较低的。如何避免这个影响请看第4条。

  3. 偶尔出现的通信极差情况,如果根本原因在于网络的波动,那么多加几条TCP通道是无益的。客观地说,网络波动带来的通信失败,是不太可能再通过技术手段提升的,因为TCP协议已经保证了数据的有效传输,但因波动而导致的TCP丢包、重传是必须经历的时间,躲不过去。

  4. 如果有条件,可以使用HTTP/2协议,其二进制分帧、首部压缩、多路复用的特性,能够解决因协议导致的链路问题。但是,由网络波动、信号差情况导致的通信效果不理想,已经不在技术能够解决的范畴内了。

撰写答案