Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一个网络应用程序有多少传入缓冲区?_C++_Linux_Multithreading_Networking - Fatal编程技术网

C++ 一个网络应用程序有多少传入缓冲区?

C++ 一个网络应用程序有多少传入缓冲区?,c++,linux,multithreading,networking,C++,Linux,Multithreading,Networking,我正在编写一个网络应用程序,它从多个客户端接收数据:当收到一个数据包时,应用程序读取并修改报头,然后将数据包转发给一个或多个客户端。我想为每个到客户机的连接使用一个输出队列,这样应用程序就能够监视每个输出队列的填充级别并检测每个客户机上的负载 传入数据包的路由可以通过单个线程来实现,该线程应该分析每个数据包的报头以确定目标客户端:该线程还访问路由表以正确转发数据包 如何处理传入的消息? 我可以为每个连接使用一个共享队列或一个输入队列: 如果我使用一个共享队列,它将被路由线程和处理与客户端的连接的

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

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

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

  • 如果我使用一个共享队列,它将被路由线程和处理与客户端的连接的线程并发访问
  • 如果我为每个输入连接使用一个输入队列,那么路由线程和处理来自客户端的连接的唯一线程将同时访问该队列
  • 在第一种情况下,路由线程的作用相当简单,因为它应该只将队列中的下一个数据包出列,并将其转发给另一个客户端。在第二种情况下,路由线程应该逐个检查所有输入队列。第二种方法的优点是避免最快的连接填满共享队列,从而增加其他连接发现队列已满的概率

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

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

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

    为什么有一根线呢?为什么不让接收线程调用一个方法,将结果消息放在目标客户机的写队列上呢