2013-06-26 35 views
2

我正在编写一个网络应用程序,它从多个客户端接收数据:当收到一个数据包时,应用程序读取并修改头,然后将数据包转发给一个或多个客户端。我想为每个到客户端的连接使用一个输出队列,因此应用程序能够监视每个输出队列的填充级别并检测每个客户端的负载。网络应用程序有多少个传入缓冲区?

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

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

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

在第一种情况下,路由线程的作用将会非常简单,因为它只应从队列中取出下一个数据包并将其转发给另一个客户端。在第二种情况下,路由线程应该逐个检查所有输入队列。第二种方法可以避免最快的连接可以填充共享队列,从而增加其他连接可以找到队列满的可能性。

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

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

回答

1

传入数据包的路由可以由单个线程

为什么有一个线程都可以实现吗?为什么不只是有一个方法,由接收线程调用,将结果消息放在目标客户端的写入队列中?