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