C ++中的并发TCP服务器

问题描述 投票:0回答:1

我正在尝试使用线程创建并发c ++ TCP服务器。特别是我想知道我是否可以使用std :: async接受连接并在其自己的线程中为每个连接提供服务。

到目前为止,我已经创建了一个粗略的模型,但无法确定我是否在正确的路径上。

void networking::TCP_Server::acceptConnection() {
    std::string stringToSend{"This is a test string to be replied to"};
    int new_fd = accept(listeningFD, nullptr, nullptr);
    send(new_fd, stringToSend.c_str(), stringToSend.size(), 0);
    sleep(3);
    std::cout << ("End of thread");

}
///LISTEN FOR CONNECTIONS ON listeningFD
///CREATE A LIST OF FILE DESCRIPTORS FOR POLL fds[]


(fds[i].fd == listeningFD)  {

 do {
                        std::cout << ("New incoming connection - %d\n", new_fd);
                        std::async(std::launch::async, acceptConnection)

                    } while (new_fd != -1);


                }  /* End of existing connection is readable             */
            } /* End of loop through pollable descriptors              */


我同时连接到具有两个客户端的服务器,并期望循环运行两个新连接并为每个连接创建一个线程。截至目前,它是在延迟模式下运行,一个被接受,另一个等到第一个完成。

有任何想法吗?

(原谅代码中的任何错误)

c++ tcp concurrency server
1个回答
1
投票

std::async返回一个std::future,代码不会保存到变量中,因此会立即调用它的析构函数。 std::future::~future()阻止调用线程,直到未来准备就绪。

您可能想使用(分离的)std::thread而不是std::async

有更多可扩展的策略来处理许多客户端。我强烈建议阅读旧的但有教育意义的The C10K problem

您可能也想熟悉qazxsw poi。

© www.soinside.com 2019 - 2024. All rights reserved.