繁体   English   中英

需要在C#中优先化异步套接字读取

[英]Need to prioritize asynchronous socket reads in C#

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

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

如果有一些方法可以在完成asynch请求之后重新确定它们的优先级,那会更好。 并将用户请求推送到队列的前面。

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

关于如何正确设计这一点的任何想法都将非常感激。

这不是一个编程问题,而是一个协议问题。 如果你使用贪婪的协议使线路饱和,那么你甚至可以使用传统协议关闭甚至自己的选项。

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

但我们已经领先于自己。 如果你想要一个性能良好的功能应用程序,你需要坐下来并根据协议专家的建议定义一个真正的协议:NIC,交换机,协议,数据包大小,重试等。一旦你完成所有整理,那么你将拥有编程问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM