Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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++ 多TCP连接与单连接_C++_Tcp - Fatal编程技术网

C++ 多TCP连接与单连接

C++ 多TCP连接与单连接,c++,tcp,C++,Tcp,我正在设计一个数据分发器(比如生成随机数),它将服务于多个客户端 客户端C首先发送它感兴趣的通过TCP进行DD的数字列表,并侦听UDP上的数据。一段时间(几分钟)后,客户可以通过向DD发送更多号码来更新其订阅列表 我可以用两种方式来设计它 第一: New_Client_Connected_Thread(int sock_fd) { --Get Subscription --Add to UDP Publisher List --close(sock_fd) } 每次客户

我正在设计一个数据分发器(比如生成随机数),它将服务于多个客户端

客户端C首先发送它感兴趣的通过TCP进行DD的数字列表,并侦听UDP上的数据。一段时间(几分钟)后,客户可以通过向DD发送更多号码来更新其订阅列表

我可以用两种方式来设计它

第一:

New_Client_Connected_Thread(int sock_fd)
{
    --Get Subscription
    --Add to UDP Publisher List
    --close(sock_fd)
}
每次客户端想要订阅新的数据集时,它都会建立一个新的TCP连接

第二:

New_Client_Connected_Thread(int sock_fd)
    {
        while(true)
        {
            --wait for new subscription list
            --Get subscription
            --Add to UDP Publisher List.

        }
    }
这里每个客户端只需要1个TCP连接

但是,如果客户端不发送新请求,客户端线程将不必要地等待很长时间


考虑到我的数据分发服务器将为许多客户机提供服务,其中哪一种似乎是最有效的方法?

Libevent,或libev,它支持事件驱动循环,可能更适合于此系统的TCP部分

您可以避免线程化,并使用TCP部分的单个循环将您的客户端添加到发布者列表中。Libevent在每秒管理大量连接和套接字断开方面非常有效,可用于Tor(洋葱路由器)等

应用程序中的TCP连接似乎更像是一个“控制平面”连接,因此,这可能取决于客户端需要“控制”服务器的频率,而服务器将在控制后决定是保持套接字打开还是关闭。请记住,保持数千个TCP连接永久打开不会占用主机上的内核资源,但在另一个打开和关闭连接时,由于连接设置时间的原因,整个过程会引入一些延迟

有关libevent TCP服务器的示例,请参见

<>因为你在C++中编码,你可能会对LiBoev./P>的包装感兴趣。