drogonframework / drogon

Drogon: A C++14/17/20 based HTTP web application framework running on Linux/macOS/Unix/Windows
MIT License
11.44k stars 1.1k forks source link

enableRunAsDaemon的用法? #2102

Closed bethebest0622 closed 2 months ago

bethebest0622 commented 2 months ago

您好,我之前使用drogon的时候,是开一个单独的线程,运行app().run()

但是最近看drogon文档的时候,看到demo的用法,尝试了一下,代码如下:

#include <drogon/drogon.h>
#include <net/if.h>
#include <unistd.h>

int main(int argc, char ** argv) {
  drogon::app().enableRunAsDaemon().run();  // 新的用法,错误
  // std::thread t([] () { drogon::app().run(); });  // 原先的用法,正确执行
  // t.detach();

  usleep(100000);

  auto cclient_ = drogon::HttpClient::newHttpClient("https://ipinfo.io");

  auto req = drogon::HttpRequest::newHttpRequest();
  req->setContentTypeString("application/json");
  req->setMethod(drogon::HttpMethod::Get);
  req->setPath("/ip");
  req->setBody("");
  const auto & [req_result, reponse_ptr] = cclient_->sendRequest(req);

  printf("body = %s\n", reponse_ptr->getBody().data());
}

我字面理解RunAsDaemon 应该是自动后台运行,可是我改完之后,运行只报了一个

Initializing daemon mode

想请教一下,是不是用法不对

an-tao commented 2 months ago

你这个写法有问题,enableRunAsDaemon是把整个进程切到后台,不是改变run函数的线程,另外这个特性对windows无效。