我正在尝试使用boost :: asio编写自己的异步网络客户端。我在可用示例中观察到的一件事是,是否要创建单个io_service,解析器和查询对象,或者为我正在创建的每个连接创建这些对象的新实例是不明确的。
我有一个客户端,它只会联系特定的服务器(唯一的ip和主机),但每天会做100次。
我打算拥有自己的网络类,在类本身中我有io_service,resolver,query和socket变量都是在构造对象时设置的。
myclient::myclient() : io_service_(), resolver_(io_service_),
query_(tcp::v4(), host_, port_), socket_(io_service_)
{
}
//...
resolver.async_resolve_();
io_service_.reset();
io_service_.run_one();
这看起来不错吗?
答案 0 :(得分:1)
您应该尝试将自己限制为一个io_service用于上面描述的进程io_service类是线程安全的,因此许多线程可以同时使用它来分派工作。快速阅读io_service类文档,其中有一些使用示例。
另请查看chat client example并注意如何在main函数中创建io_service,然后通过引用传递给chat_client类。