gpt4 book ai didi

我可以使用 select 以接口(interface)可以处理的速度在多个接口(interface)上发送数据吗

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:51 27 4
gpt4 key购买 nike

我是一名经验丰富的网络程序员,我面临着需要一些建议的情况。

我需要在几个传出接口(interface)上分发一些数据(通过不同的 tcp 套接字连接,每个对应于每个接口(interface))。然而,重要的是,我应该能够在接口(interface)上发送更多/大部分数据,具有更好的带宽,即发送速度更快的接口(interface)。

我的意见是为此目的使用 select api(unix 和 windows)。我过去使用过 select、poll 甚至 epoll。但它总是用于在数据可用时从多个套接字读取。

这里我打算在几个接口(interface)上按顺序写入连续的数据包,然后监视每个接口(interface)的写入描述符(选择参数),然后哪个可用(意味着它能够先发送数据包),我会继续发送更多数据包通过该描述符。

我能在这里实现我的意图吗?即,如果我有一个 10Mbps 链路接口(interface)与另一个 1Mbps 链路接口(interface),我希望能够通过更快的接口(interface)获取大部分数据包。

更新 1: 我想知道在这种情况下 select 的行为是什么,即当您在读取描述符上调用 select 时,返回数据可用的那个。但是,在我的场景中,当我们在描述符上写入并等待 select 返回首先完成写入的那个时,select 是否确保仅在写入整个数据包时返回,即说我尝试一次写入 1200 个字节。它只会在整个 1200 都返回或存在永久错误时返回吗?我不确定 select 的行为如何,并且找不到任何描述该行为的文档。

最佳答案

我会改编 producer/consumer pattern .在这种情况下,一个生产者和几个消费者。

让主线程处理您的源(作为生产者)并为每个连接生成一个线程(作为消费者)。

并行的线程分别拉取一大块源并将其一个接一个地发送到连接上。

持有最快连接的线程应该在此设置中发送最多的 block 。

关于我可以使用 select 以接口(interface)可以处理的速度在多个接口(interface)上发送数据吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17081097/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com