网络应用程序的传入缓冲区数量
How many incoming buffers for a networking application?
我正在编写一个从多个客户端接收数据的网络应用程序:当接收到数据包时,该应用程序读取并修改标头,然后将数据包转发给一个或多个客户端。我想为每个到客户端的连接使用一个输出队列,这样应用程序就能够监视每个输出队列的填充级别并检测每个客户端上的负载。
传入数据包的路由可以由一个线程来实现,该线程应该分析每个数据包的标头,以确定目标客户端:该线程还访问路由表,以便正确转发数据包。
如何处理传入消息?我可以为每个连接使用一个共享队列或一个输入队列:
- 如果我使用单个共享队列,路由线程和处理与客户端连接的线程将同时访问它
- 如果我为每个输入连接使用一个输入队列,路由线程和唯一处理客户端连接的线程将同时访问它
在第一种情况下,路由线程的作用相当简单,因为它只应将队列中的下一个数据包出列并转发给另一个客户端。在第二种情况下,路由线程应该逐个检查所有输入队列。第二种方法的优点是避免了最快的连接可以填充共享队列,从而增加了其他连接发现队列已满的概率。
第二种方法要求路由线程遵循一种策略,该策略确保与输入队列相关的公平行为。在这种情况下可以使用什么策略?
此外,还有什么其他原因可能导致人们选择第一种或第二种解决方案?这两种解决方案的优点和缺点是什么?
传入数据包的路由可以通过单线程实现
为什么有线索?为什么不使用接收线程调用的方法,将结果消息放入目标客户端的写入队列中?
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- 从OpenGL应用程序中提取颜色/深度缓冲区
- 我正在编写一个简单的客户端套接字应用程序,但在连接后服务器收到一个空缓冲区
- 协议缓冲区2和3在同一C Linux应用程序中
- CRT 检测到应用程序在堆缓冲区(新建/删除)类结束后写入内存
- 如何修复此错误?CRT检测到应用程序在堆缓冲区结束后写入内存
- waveOutWrite 缓冲区永远不会返回到应用程序
- 网络应用程序的传入缓冲区数量
- 如何获取有关混合应用程序中缓冲区溢出异常的信息
- c++ CRT检测到应用程序在堆缓冲区结束后写入内存
- 如何清除c++应用程序中的输入缓冲区