【发布时间】:2019-06-04 00:21:51
【问题描述】:
我有我的 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() 之类的操作,而不会引入某种竞争条件,即在取消之前开始读取。
【问题讨论】:
-
测试
do_accept()中的原子标志是否继续接受新连接? -
嗯.. 我认为这不是一个好主意。相反,只需从正确的隐式或显式链调用接受器上的
close。
标签: c++ boost-beast