Boost asio http 客户端 - io_service.run()

发布于 2024-12-16 22:29:55 字数 424 浏览 0 评论 0原文

我正在尝试弄清楚 io_service.run() 函数如何在客户端中运行。这与这个问题有些相关,但在另一端连接的。在客户端情况下,没有接受处理程序,那么 io_service.run() 什么时候返回?

理想情况下,我想运行一次(据我了解,每个线程,欢迎更正,每个调用 io_service.run() 的线程基本上都会添加到 io_service 线程池中),然后发送大量请求,而无需需要再次调用resetrun。当 io_service 没有工作可做时,发送的请求中将会出现间隙,但这些间隙的出现在很大程度上是不确定的,具体取决于用户行为。

I'm trying to work out how the io_service.run() function operates in a client. This is somewhat related to this question but on the other end of the connection. In a client situation there is no accept handler so when will the io_service.run() return?

Ideally I want to run it once (per thread, as I understand it, correction welcome, each thread that calls io_service.run() is basically added to the io_service thread pool) then send lots of requests without needing to call reset, run again. There will be gaps in the requests being sent when the io_service will have no work to do but the occurrence of those gaps is largely non-deterministic, based on user behavior.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁月静好 2024-12-23 22:29:55

正如您所说,io_service 当它耗尽工作时返回,例如在服务器中,accept 调用为其提供工作。为了防止 io_service 耗尽工作,请查看 io_service::work 类。

链接 取自此 SO 帖子,提供了以下概述如何使用工作对象。特别是,将工作对象存储在 shared_ptr 中并在想要停止应用程序等时重置 shared_ptr 是一个有用的习惯用法。通过不调用 io_service::stop() 方法(该方法也可用于停止 io_service),您可以干净地完成所有必需的工作嗯>。

As you stated, an io_service returns when it runs out of work e.g. in a server the accept call provides it with work. To prevent an io_service from running out of work, have a look at the io_service::work class.

This link taken from this SO post, provides an overview of how the work object can be used. In particular storing the work object in a shared_ptr and resetting the shared_ptr when wanting to stop the application, etc. is a useful idiom. By not calling the io_service::stop() method (which can also be used to stop the io_service) you allow all required work to be completed cleanly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文