gpt4 book ai didi

c++ - 如何保持服务器运行(cpprestsdk - 卡萨布兰卡)

转载 作者:行者123 更新时间:2023-11-28 04:42:27 25 4
gpt4 key购买 nike

我正在使用 Microsoft 的 cpprestsdk(又名 casablanca)开发 REST api,但在执行我的代码时我无法保持服务器运行。

在这里查看我的 main.cpp:

int main() {
cout << "Starting Server" << endl;

TransactionController server;
server.setEndpoint("http://0.0.0.0:4200/api");
server.initHandlers();

try {
server.openServer();
cout << "Server listening at: " << server.getEndpoint() << endl;

// figure out how to keep server running without this?
while (true);
}
catch(exception &e) {
cout << "--- ERROR DETECTED ---" << endl;
cout << e.what() << endl;
}


// this doesn't get reached bc of the while(true)
server.closeServer();

return 0;
}

此外,作为引用,这是我在 main.cpp 中的实现或功能:

pplx::task<void> TransactionController::openServer() {
return listener.open();
}

pplx::task<void> TransactionController::closeServer() {
return listener.close();
}

std::string TransactionController::getEndpoint() const{
return listener.uri().to_string();
}


void TransactionController::initHandlers() {
listener.support(methods::GET, bind(&TransactionController::handleGet, this, std::placeholders::_1));
listener.support(methods::POST, bind(&TransactionController::handlePost, this, placeholders::_1));
}

void TransactionController::setEndpoint(const string& value) {
listener = http_listener(value);
}

我发现了一个不太理想的解决方法,就是添加一个

while(true);

保持服务器运行,直到我手动停止执行。

不过,我想以更优雅的方式实现此功能。我浏览了在线文档,但未能找到正确的方法。

任何正确方向的提示或指示将不胜感激,因为我以前从未与卡萨布兰卡合作过。感谢您的宝贵时间!

最佳答案

所以我设法通过使用此处提供的代码来解决这个问题:

https://github.com/ivanmejiarocha/micro-service/blob/master/source/foundation/include/usr_interrupt_handler.hpp

现在这是我的新 main.cpp:

int main() {
cout << "Starting Server" << endl;

InterruptHandler::hookSIGINT();

TransactionController server;
server.setEndpoint("http://0.0.0.0:4200/api");
server.initHandlers();

try {
server.openServer().wait();
cout << "Server listening at: " << server.getEndpoint() << endl;

InterruptHandler::waitForUserInterrupt();

server.closeServer().wait();
cout << "Shutting Down Server" << endl;
}
catch(exception &e) {
cout << "--- ERROR DETECTED ---" << endl;
cout << e.what() << endl;
}

return 0;
}

关于c++ - 如何保持服务器运行(cpprestsdk - 卡萨布兰卡),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49936203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com