Microsoft cpprestsdk слушать несколько URL с тем же IP? - PullRequest
0 голосов
/ 04 февраля 2020

Я хочу использовать cpprestsdk , чтобы создать спокойный API, я скопировал некоторый код из здесь :

int main()
{
    http_listener listener("http://0.0.0.0:9080/demo/work1");
    cout<<"start server!"<<endl;
    listener.support(methods::GET,  handle_get);
    listener.support(methods::POST, handle_post);
    listener.support(methods::PUT,  handle_put);
    listener.support(methods::DEL,  handle_del);

    try
    {
        listener
                .open()
                .then([&listener]() {TRACE(L"\nstarting to listen\n"); })
                .wait();

        while (true);
    }
    catch (exception const & e)
    {
        cout << e.what() << endl;
    }

    return 0;
}

, теперь я должен слушать не только "http://0.0.0.0: 9080 / demo / work1 ", но также "http://0.0.0.0: 9080 / demo / work2 ", "http://0.0.0.0: 9080 / realfunction / work1 ». Все в том же IP-адресе и порте, но в другом под-пути

Должен ли я использовать несколько слушателей для обработки всех URL-адресов один за другим в многопоточности? Или есть другой способ справиться с этим?

1 Ответ

1 голос
/ 18 февраля 2020

Можно установить

http_listener listener("http://0.0.0.0:9080/");

А затем в обработчике проверить запрос. В примерах, связанных в github cpprestsdk, я видел такие вещи, как

void handle_get(http_request message) {
    auto path = uri::split_path(uri::decode(message.relative_uri().path()));

    if (path.size() == 2 && path[0] == "demo" && path[1] == "work1") {
           // ...
    } else if (path.size() == 2 && path[0] == "demo" && path[1] == "work2") {
          // ...
    } else {
          message.reply(status_codes::NotFound);

    }
}
...