我正在编写一个应用程序,它具有在两个实例之间并行运行的数百个并行网络操作。由于连接的平均寿命非常短(至多秒),我认为每次使用多个TCP连接并握手(特别是对于TLS握手)的开销会过大。搜索多路复用的C/C++网络库
我开始看一对夫妇协议和库实现复用(主要是AMQP实现比如Apache Qupid,RabbitMQ,在答案中提到,以this question)的。然而,它们都似乎运行在TCP上,这引入了一些开销并且没有多大意义(this post很好地解释了这个问题,并得出了TCP多路复用是愚蠢的结论)。他们都觉得很胖,我更喜欢小而轻(ZeroMQ不幸的是不实现复用afaik)。这让我想到了使用UDP是否是一种选择。当然,人们必须正确地实施恢复和确认等内容,但是通过连接的多个流的知识应该比简单地使用TCP更有效。
你认为我上面的推理是正确的,还是我错过了重要的事情?有没有实现通过UDP多路复用的好的C/C++库?
对于高性能网络事件处理(复用),您可以查看[libevent](http://libevent.org/)或[libev](http: //software.schmorp.de/pkg/libev.html)。 –
从它的外观来看,你会用UDP的方式重新实现TCP,而我不知道如何让它更有效率。您链接到的帖子并没有真正说'TCP多路复用是愚蠢的',更多的是存在复杂的风险(例如本地缓冲区溢出),并且这些也倾向于应用于模拟TCP。 – Kylotan
@Kylotan没错,但我的“重新实现”会知道多路复用流。链接中突出显示的问题是多路复用流所需的ACK会触发另一个TCP ACK(因此会增加往返)。这是不需要的开销,不会发生在UDP上。 –