boost-asio 相关问题

Boost.Asio是一个用于网络和低级I / O编程的跨平台C ++库,它使用现代C ++方法为开发人员提供一致的异步模型。

多个 SSL 客户端连接的 CPU 使用率 Boost.ASIO

我基于Boost.Asio制作了一个SMTPS客户端类。我只是想知道在使用它们发送电子邮件时我应该期望 CPU 使用率如何。现在作为压力测试,我在 io_c 上排队 15...

回答 1 投票 0

是否支持在同一条链上执行 boost::asio::~strand<> ?

短版 是否支持在同一条链上执行 boost::asio::~strand<> ? 找到文档 文档似乎不一致,“遗留/已弃用” boost::asio::io_context::st...

回答 1 投票 0

使用 boost::asio 的 HTTP POST 请求

哪里可以看到使用 boost::asio 的 HTTP POST 请求示例? 我只看到了一些 HTTP GET 请求的示例。

回答 1 投票 0

Boost ASIO 在调用回调函数时崩溃

我是 boost 库的新手。我已经使用 boosteastasync 方法编写了一个服务器,但有时它会崩溃。这种情况并不常见,有时需要 3-4 小时才会崩溃。我是莎莉...

回答 1 投票 0

Tcp代理mysql。从mysql客户端接收到的数据以奇怪的符号输出

// std:string _sql_statement; // char _client_data[max_data_length]; // size_t bytes_transferred; void tcp_proxy::Bridge::handle_read_fclient(const error_code& error, const size_t &

回答 1 投票 0

由于 boost::asio::co_spawn 如何通过 io_context::run 传播,异常消失了

在协程之前,当从回调中抛出异常时,例如通过 boost::asio::post ,异常将从 boost::asio::io_context::run() 传播出去。但是,如果通过以下方式使用协程......

回答 1 投票 0

当作业在线程之间发布时,Boost ASIO 多线程应用程序崩溃

我正在尝试将 boost 单线程应用程序扩展到多线程应用程序。该代码基于本文。我采取的方法是为每个线程提供专用的 IO_Context...

回答 1 投票 0

如何在异步 Rust 中轮询/取得进展而不阻塞

在带有 boost asio 的 C++ 中,您可以通过调用 io_context.run() (阻塞)或 io_context.poll() (非阻塞)在异步上下文上取得进展。看起来在 Rust 中,await 的行为类似于 asi...

回答 1 投票 0

c++ asio 如何维护异步对象的生命周期

在 asio 中,每当我想使用异步对象来执行某些异步操作时,我都必须使用共享指针,因为异步操作处理程序位于 io_context 内部,并且如果异步...

回答 1 投票 0

对 boost asio 中的 async_compose 函数感到困惑

我试图学习一些关于基于boost asio编写自己的异步函数的知识,所以我尝试实现一个异步ntp查询函数: #包括 #包括 #包括...

回答 1 投票 0

无法使用 boost 验证我的自签名证书

我通过自签名证书(使用我自己的 CA)生成,现在我正在尝试让 boost ASIO 客户端验证服务器的身份。我用 openssl 验证了这些,验证似乎......

回答 2 投票 0

如何避免并发回调用户定义的例程?

我正在尝试修改一些Boost代码,使其与AutoHotKey兼容。原始项目可以在这里找到。我的版本可以在这里找到。我可以使用一些帮助来确定如何做

回答 1 投票 0

如何使用 boost::beast 避免回调地狱?

我正在开发一个应用程序,我想在其中使用 boost::beast/asio。我需要通过 websocket 连接接收数据,同时向 REST API 发出请求。 在boost::野兽网...

回答 1 投票 0

Boost 异步 Websocket 服务器问题

我通过 boost.beast 编写了一个异步 websocket。但是当我尝试运行它时,我无法连接它。 服务器代码如下。当我尝试连接我的 websocket 服务器时,我的 chrome 显示状态连接...

回答 1 投票 0

如何将 boost::aio::async_connect 与 lambda 一起使用

我想了解一下如何将 boost::aio::async_connect 与 lambda 一起使用。 升压版本1.68 我可以使用 std::bind 但不能使用 lambda,这真的很奇怪。 如果我使用 std::bind,它就可以工作。 但是当我使用la...

回答 1 投票 0

如何查找是否找不到 websocket::stream::async_handshake() 的“目标”?

对于 HTTP 调用,您可以执行以下操作: http::async_read(m_stream、m_buffer、m_res、beast::bind_front_handler(&RestSession::on_read、shared_from_this())); // ... 然后 void on_read(beast::error_code ec, s...

回答 1 投票 0

使用异步 cpp boost 套接字时减少响应时间

我创建了一个异步野兽服务器,它从浏览器获取请求,打开第二个套接字,写入请求,获取响应并将其发送回浏览器。全部异步。作为“发送...

回答 1 投票 0

对来自 websocket 的每个刻度事件做出反应

我想设计我的交易系统,对我订阅的 websocket 流中的每个价格变动事件做出反应。 所以基本上我有两个选择: void WebsocketClient::on_write(beast::error_code e...

回答 1 投票 0

当我在 on_read 上看到错误时,我应该清理野兽::flat_buffer吗?

http_client_async_ssl 课堂会话:public std::enable_shared_from_this { ... 野兽::flat_buffer buffer_; //(在读取之间必须保留) http::回应 http_client_async_ssl class session : public std::enable_shared_from_this<session> { ... beast::flat_buffer buffer_; // (Must persist between reads) http::response<http::string_body> res_; ... } void on_write(beast::error_code ec, std::size_t bytes_transferred) { if (ec) { fail(ec, "write"); return try_again(); } // Receive the HTTP response http::async_read( stream_, buffer_, res_, beast::bind_front_handler(&session::on_read, shared_from_this())); } void on_read(beast::error_code ec, std::size_t bytes_transferred) { if (ec) { fail(ec, "read"); return try_again(); } // Step 1: process response // const auto &body_data = res_.body().data(); user_parse_data(net::buffers_begin(body_data), net::buffers_end(body_data)); // Step 2: clean up buffer_ // buffer_.consume(buffer_.size()); // clean up buffer_ after finishing reading it // Step 3: continue to write ... } 在上面的实现中,我仅在成功解析数据后才清理buffer_。 问题> 当我在 buffer_ 上也遇到错误时,我应该清理 on_read 吗? void on_read(beast::error_code ec, std::size_t bytes_transferred) { if (ec) { // clean up buffer_ buffer_.consume(buffer_.size()); // Should we do the cleanup here too? fail(ec, "read"); return try_again(); } // Step 1: process response // const auto &body_data = res_.body().data(); user_parse_data(net::buffers_begin(body_data), net::buffers_end(body_data)); // Step 2: clean up buffer_ // buffer_.consume(buffer_.size()); // Step 3: continue to write ... } // Should we do the cleanup here too? 这完全是在问错误的问题。 首先出现的一个明显问题是“我们是否应该清理读取缓冲区”。 更重要的问题是:你用这个连接做什么? 缓冲区属于连接,因为它代表流数据。 您链接的示例始终会关闭连接。因此,缓冲区在收到响应后就变得无关紧要了——因为连接变得无关紧要。请注意,链接的示例也不在缓冲区上。 你应该清理吗? 您不应该在consume之后进行清理! 原因是http::read已经消耗了解析为响应消息一部分的所有数据。 即使您希望从同一连接(例如 HTTP 管道)读取更多消息,您也需要以相同的 http::read 开始下一个 http::read,因为它可能已经包含后续消息的(部分)数据。 出现错误怎么办? 如果您在 HTTP 传输过程中出现 IO/解析错误,我预计在大多数情况下 HTTP 协议规范将要求您关闭连接。 HTTP/1 中没有“try_again”。一旦丢失流内容的线程,就无法恢复到“已知状态”。 无论如何,我总是建议关闭失败的 HTTP 会话,因为不这样做会导致消息损坏和安全漏洞。

回答 1 投票 0

与 C++20 协程一起使用时,boost::asio::use_awaitable 和 boost::asio::deferred 有什么区别?

将 C++20 协程与 Boost.Asio 一起使用时,可以使用 boost::asio::use_awaitable 或 boost::asio::deferred 使操作可等待,如以下示例所示。 std::size_t n =

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.