【问题标题】:Running boost::asio asynchronous server alongside command loop在命令循环旁边运行 boost::asio 异步服务器
【发布时间】:2017-11-20 05:08:53
【问题描述】:

我正在尝试创建一个 C++ 守护程序,它能够通过网络以数据包的形式异步发送/接收请求/响应。它应该与客户端(面向外部的消息 API)和其他守护进程(服务器间消息)进行通信

我目前正在查看boost::asio,特别是http://www.boost.org/doc/libs/1_65_1/doc/html/boost_asio/tutorial/tutdaytime6/src.html 作为起点,它似乎正在运行能够处理异步的服务器。发送和接收。

我的问题是,该服务器是否可以与(在后台)命令循环一起运行,例如响应用户输入的进程(例如 shell)?提供的日间服务器程序好像卡在了io_service.run();

这是否需要分叉或单独的线程服务器?

【问题讨论】:

标签: c++ asynchronous boost network-programming boost-asio


【解决方案1】:

您只需创建一个线程成员变量,并让io_service 在线程上运行。您可以在主线程中处理所有进程输入,并为您的服务器类变量做一些工作。

std::thread ioThread;
ioThread = std::thread([this]() { io_service.run(); });

不要忘记稍后加入线程并停止 io_service。

io_service.stop();
if (ioThread.joinable())
    ioThread.join();

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 2014-12-22
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多