提升 HTTP 服务器问题

Boost HTTP server issue

本文关键字:问题 服务器 HTTP 提升      更新时间:2023-10-16

我开始使用Boost,所以可能是我搞砸了。

我正在尝试使用boost(ASIO)设置http服务器。我从文档中获取了代码:http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/examples/cpp03_examples.html(HTTP服务器,第一个)

与示例的唯一区别是我通过自己的方法"运行"运行服务器并在后台线程中启动io_service,如文档中所示:http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/io_service.html

boost::asio::io_service::work work(io_service_);

(我也从我的运行方法中停止io_service。

当我启动这个修改后的服务器时,一切似乎都很好,运行方法工作正常。但是然后我试图从请求挂起的服务器获取文档,并且控制流永远不会进入"request_handle"方法。我错过了什么吗?

上。这是我的运行方法代码:

void NetstreamServer::run()
{
  LOG4CPLUS_DEBUG(logger, "NetstreamServer is running");
  boost::asio::io_service::work work(io_service_);
    try
    {
      while (true)
      {
        if (condition)
        {
          io_service_.stop();
          break;
        }
      }
    }
    catch (std::exception const& e)
    {
      LOG4CPLUS_ERROR(logger, "NetstreamServer" << " caught exception: " << e.what());
    }
}

你应该调用io_service_::run() - 否则没有人会调度由io_service_提供服务Asio对象的完成处理程序。

如果不包括您更改的代码,这里的每个人都只能猜测。不幸的是,您也不包括您正在使用的编译器和操作系统。即使 boost 声称它是独立于平台的,您也应该始终包含此信息,因为实际上,即使使用 boost,平台也是不同的。

让我做一个猜测。你用Microsoft窗口?如何防止"主"功能退出?您将阻塞"运行"函数移出另一个线程,main 函数不再有等待点。让我再猜一猜,你使用了类似"getchar"的东西。有了它,您只需按键盘返回键即可退出服务器。如果是,问题出在getchar上,不幸的是,它阻止了asio套接字实现的每个io,但仅在基于Windows的系统上。

我不需要猜测您是否会包含帖子中提到的信息。特别是您对代码示例所做的所有 (!) 更改。