网络应用程序的传入缓冲区数量

How many incoming buffers for a networking application?

本文关键字:缓冲区 应用程序 网络      更新时间:2023-10-16

我正在编写一个从多个客户端接收数据的网络应用程序:当接收到数据包时,该应用程序读取并修改标头,然后将数据包转发给一个或多个客户端。我想为每个到客户端的连接使用一个输出队列,这样应用程序就能够监视每个输出队列的填充级别并检测每个客户端上的负载。

传入数据包的路由可以由一个线程来实现,该线程应该分析每个数据包的标头,以确定目标客户端:该线程还访问路由表,以便正确转发数据包。

如何处理传入消息?我可以为每个连接使用一个共享队列或一个输入队列:

  1. 如果我使用单个共享队列,路由线程和处理与客户端连接的线程将同时访问它
  2. 如果我为每个输入连接使用一个输入队列,路由线程和唯一处理客户端连接的线程将同时访问它

在第一种情况下,路由线程的作用相当简单,因为它只应将队列中的下一个数据包出列并转发给另一个客户端。在第二种情况下,路由线程应该逐个检查所有输入队列。第二种方法的优点是避免了最快的连接可以填充共享队列,从而增加了其他连接发现队列已满的概率。

第二种方法要求路由线程遵循一种策略,该策略确保与输入队列相关的公平行为。在这种情况下可以使用什么策略?

此外,还有什么其他原因可能导致人们选择第一种或第二种解决方案?这两种解决方案的优点和缺点是什么?

传入数据包的路由可以通过单线程实现

为什么有线索?为什么不使用接收线程调用的方法,将结果消息放入目标客户端的写入队列中?