首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用多路复用技术搜索C/C++网络库

利用多路复用技术搜索C/C++网络库
EN

Stack Overflow用户
提问于 2012-11-06 21:19:37
回答 1查看 1.5K关注 0票数 2

我正在编写一个应用程序,其中有许多(数百)个并发网络操作在两个实例之间并行运行。由于连接的平均生存期很短(最多几秒钟),我认为使用许多TCP连接并每次进行握手(特别是TLS握手)的开销太大。

我开始研究一些实现多路复用的协议和库(主要是AMQP实现,如Apache QupidRabbitMQ,如this question的答案中所提到的)。然而,它们似乎都运行在TCP之上,这引入了一些开销,并且没有太多意义(this post很好地解释了这个问题,并得出TCP多路复用是愚蠢的结论)。而且它们都感觉很胖,我更喜欢小而轻的东西(不幸的是ZeroMQ没有实现多路复用afaik)。这让我开始思考是否可以选择使用UDP。当然,人们必须正确地实现恢复和ACK之类的东西,但要了解连接上的多数据流,这应该比简单地使用TCP更有效。

你认为我上面的推理是正确的,还是我错过了什么重要的东西?有没有好的C/C++库可以通过UDP实现多路复用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-06 22:03:02

做可能工作的最简单的事情,只有在必要的时候才让它变得更复杂:

  1. 使用单个TCP连接并在其上多路传输逻辑会话

代码语言:javascript
复制
- if these logical entities are just asynchronous request/response pairs, for example, you may be able to dispense with explicit logical sessions entirely

  1. 如果您在每个实例中有多个并发组件,这些组件确实需要自己的队列通过推回来抑制过度急切的发送者:

代码语言:javascript
复制
- first consider just capping the number of outstanding requests/active sessions on the sending side, instead of requiring a specific ack
- only if you need to dynamically vary queue length (eg. because you're really trying to limit working memory, which varies by session) use an explicit logical ack for this

  1. 只有当您遇到逻辑会话与TCP的交互确实很糟糕的情况时,才考虑实现自己的可靠流控制数据报协议

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13251925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档