gpt4 book ai didi

c++ - Beast websocket 惯用关闭?

转载 作者:行者123 更新时间:2023-11-30 04:52:50 26 4
gpt4 key购买 nike

我有我的 C++ 程序。主线程创建一个新线程,专用于处理 websocket。这个新线程使用例如 boost beast 的 async_read() 调用进行读写。它很像 https://www.boost.org/doc/libs/1_69_0/libs/beast/example/websocket/server/async/websocket_server_async.cpp每个异步调用都会引发另一个异步调用。

但是让主线程告诉 websocket 线程关闭的惯用方法是什么,因为可能总会有一些未完成的异步读取或写入调用,如 async_read() 空闲等待服务器最终发送数据。关闭需要执行一些操作,例如取消剩余的 async_read(),而不引入某种竞争条件,即读取在取消之前开始发生。

最佳答案

使用 boost::asio::post 将 lambda 发布到 io_context(必要时使用适当的 strand)调用 取消 底层basic_socket。挂起的操作将立即完成并显示 boost::asio::error::operation_aborted。在您的完成处理程序中,您可以检查 basic_socket::is_open 以了解您是否应该尝试新的异步调用。

关于c++ - Beast websocket 惯用关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54106530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com