luc*_*nte 2 c c++ networking multiplexing
我正在编写一个应用程序,它在两个实例之间并行运行了多个(数百个)并发网络操作.由于连接的平均寿命非常短(最多几秒),我认为每次使用许多TCP连接并进行握手(特别是对于TLS握手)的开销太大.
我开始研究实现多路复用的几个协议和库(主要是Apache Qupid,RabbitMQ等AMQP实现,如本问题的答案中所述).然而,所有这些似乎都在TCP上运行,这引入了一些开销并且没有多大意义(这篇文章很好地解释了问题并且得出结论TCP多路复用是愚蠢的).他们所有人都感觉很胖,我更喜欢小而轻的东西(ZeroMQ遗憾的是,没有实现多路复用.这让我想到是否使用UDP是一种选择.当然,必须正确地实现恢复和ACK之类的东西,但是通过连接知道有关多个流的知识应该比简单地使用TCP更有效.
你认为我上面的推理是正确的,还是我错过了一些重要的东西?有没有好的C/C++库通过UDP实现多路复用?
尽可能做最简单的事情,并在必要时使其更复杂:
使用单个TCP连接并在其上复用逻辑会话
如果你在每个实例中有多个并发组件,它们确实需要自己的队列,并带有回送来限制过度发送的发送者:
只有当你遇到逻辑会话与TCP真正交互不良的情况时,才考虑实现自己的可靠流量控制数据报协议