在发送响应之前测量好吞吐量

3

我的想法是让在慢速连接上工作的Web应用程序可以回退到替代的较小版本(如图像、视频等)。HTTP Live Streaming具有类似的行为,但适用于视频流。

起初,我认为可以通过使用HTTP/2服务器推送来实现这一点。Web服务器将发送响应,测量好吞吐量,并在关闭连接之前推送适当的资产版本。但这将消除服务器推送的优势,因为客户端只能在接收到页面主体后开始下载资产。由于资产不像流式服务那样提供,因此服务器应在向客户端发送HTTP响应之前检测到好吞吐量。

我还想检查是否可以从TCP堆栈中获取吞吐量,例如来自慢启动的值。但我猜想只有在发送响应时才可用。

有人知道Web服务器在发送响应之前如何测量好吞吐量吗?

1个回答

2
可能还有其他情况,但我可以冒险回答服务器首次见到客户端的情况。在建立TCP连接时,服务器的操作系统基本上只有一个数据点,由ACK包给出。我认为用一个数据点来衡量网络吞吐量或好吞吐量是不现实的。通过原始套接字与这些数据包进行交叉,没有办法在应用程序中查看它们的时间。然后你有TLS握手。对于这个握手,可能可以观察发送和接收的数据包的大致时间。我说大致是因为一旦它们在操作系统缓冲区中,从应用程序内部无法知道它们实际放入线路的时间。然后这些延迟与好吞吐量没有直接关系。尽管如此,我认为你的想法是可行的,因为浏览器在获取大量其他内容(.html本身、.css、javascript甚至网络字体)之后很长一段时间才开始获取图像数据,通常已经超出了慢启动阶段。此时可能已经有足够的机会收集足够的统计数据以建立好吞吐量估计。而且在HTTP/2中,如果您想确保,可以稍微延迟发送数据...
然而,在这种情况下,我建议不要将两个不同的实时资产与相同的URL相关联。想想看:用户首先在不良连接中获取图像,该图像被缓存。下次用户从家里的停靠站连接时,缓存的图像将显示给他。很难看!但是Web应用程序可以在请求资产之前查询服务器以获取一些网络吞吐量统计数据(看到了吗?不需要使用PUSH)。我想这对视频特别有效。
对于图像,您可以简单地使用逐行扫描/渐进式PNG或JPEG。我们正在构建某些东西Shimmercat来控制单个扫描线块的优先级。这个可能会使用push....

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接