6

我的应用程序使用异步 HttpWebRequest 请求预取大量视频帧。因此,如果有 100 帧,预取器将异步请求所有 100 帧,一次全部,并在收到返回时进行处理。即,它一次进行 100 次异步调用。这可能会使网卡饱和,但没关系。我想最大化网络带宽。

然而,当这种预取发生时,用户可能想要查看其中一个帧。因此,假设他们想要查看第 56 帧。问题是,第 1 到 100 帧已经被请求,并且正在处理中,因此对第 56 帧的请求可能需要很长时间才能得到响应。

如果有某种方法可以在异步请求发出后重新确定它们的优先级,那将是一件好事。并将用户请求推送到队列的最前面。

如果我不能这样做,我想我将不得不分批请求帧,以便我可以在批次之间插入我的用户请求,并避免超时。

任何关于如何正确设计的想法都将不胜感激。

4

2 回答 2

1

这不是编程问题,而是协议问题。如果您使用使线路饱和的贪婪协议,那么您甚至使用传统协议有效地关闭了您自己的选项。

如果您为第二个通道保留了一部分带宽,则可以将该第二个通道用于单个帧而不是批量帧。要在存在饱和 NIC 的情况下对第二个通道中的帧进行优先级排序,您需要服务质量或其他一些链路层来确定流量的优先级。

但我们正在超越自己。如果您想要一个表现良好的功能应用程序,您需要坐下来根据协议专家的建议定义一个真正的协议:网卡、交换机、协议、数据包大小、重试等。一旦您将所有内容整理好,您将拥有一个编程问题。

于 2011-05-13T03:28:55.010 回答
0

啊,我会使用优先级队列或堆来处理帧的“数据包”。由于您不想要超时并且还想要速度,因此创建帧数据包(大小为 2 的幂)并将它们与优先级相关联(也许 0 表示未请求,1 表示用户请求?)。这样,最高优先级的数据包(用户请求)将始终位于队列的前面或堆的顶部。

于 2011-05-13T03:18:22.800 回答