我正在开发一个Windows代理程序,其中通过不同适配器连接的两个TCP套接字被我的程序桥接。也就是说,我的程序从一个套接字读取并写入另一个套接字,反之亦然。每个套接字都由它自己的线程处理。当一个套接字读取数据时,它会排队等待另一个套接字写入数据。我遇到的问题是,当一个链路以100Mb的速度运行时,另一个链路以10Mb的速度运行。我从100Mb链路读取数据的速度比将数据写入10Mb链路的速度还要快。我如何“减慢”较快的连接速度,使其实质上以较慢的链接速度运行?不能将较快的链路更改为较慢的速度。--谢谢
发布于 2010-02-23 10:54:55
在读写线程之间创建一个定长队列。当队列已满时阻塞入队,当队列为空时阻塞出队。常规信号量或互斥/条件变量应该可以工作。调整队列大小,使较慢的线程始终处于忙碌状态。
发布于 2010-02-23 10:55:32
如果这是一个问题,那么您编写的程序就是错误的。
在一个10 10mbps的链接上不能超过10 10mbps,所以在较慢的链接上写的线程在你写的时候会开始阻塞。所以,只要你的线程使用与写缓冲区相同大小的读缓冲区,线程就应该尽可能快地消耗数据,并将其抛出10 10mbps的管道。为了防止远程发送者将超过10 10mbps的流量输入到100 10mbps的管道中,所需的任何流量控制都将由TCP协议自动处理。
所以,只要你的读写缓冲区在该线程(或任何线程)中的大小相同,这应该不是问题。
发布于 2010-02-23 10:56:21
当您无法写入数据时,停止读取数据。
有一个字节队列从100Mb/s链路进入你的程序,还有一个从你的程序到10Mb/s链路的队列。当传出队列已满时,停止读取传入队列和TCP,同时调节100Mb/s链路上的客户端。
您可以在读取器和写入器之间使用内部队列来干净地实现这一点。
https://stackoverflow.com/questions/2315819
复制相似问题