Параллельный TCP-сервер в C ++ - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь создать параллельный 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              */


Я одновременно подключаюсь к серверу с двумя клиентами и ожидаю, что цикл пройдет через оба новых подключения и создаст поток для каждого из них. На данный момент он работает в отложенном режиме, один принимается, другой ждет, пока первый не завершится.

Есть идеи?

(простите за любые ошибки в коде)

1 Ответ

1 голос
/ 26 апреля 2019

std::async возвращает std::future, который код не сохраняет в переменную, поэтому его деструктор вызывается немедленно.std::future::~future() блокирует вызывающий поток, пока будущее не станет готовым.

Вы можете использовать (отсоединено) std::thread вместо std::async.

Естьболее масштабируемые стратегии для работы со многими клиентами.Я настоятельно рекомендую прочитать старые, но поучительные Проблема C10K .

Вы также можете ознакомиться с Библиотека Asio C ++ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...