关于Boost Beast WebSocket中async_ping/async_close与未完成async_write共存时调用规范的疑问
关于Boost Beast WebSocket中async_ping/async_close与未完成async_write共存时调用规范的疑问
我最近在梳理Boost Beast WebSocket的异步操作规范时,被新旧版本文档的差异搞懵了,特意来请教大家。
旧版Boost文档(1.68.0)的明确要求
在Boost 1.68.0的文档里,对这几个异步写入操作的互斥约束写得非常清楚:
- 关于
websocket::stream::async_ping的说明:
该操作基于下层的
async_write_some函数实现,属于组合操作。程序必须确保在该操作完成前,流不能执行其他写入操作。
- 关于
websocket::stream::async_close的说明:
该操作基于下层的
async_write_some函数实现,属于组合操作。程序必须确保在该操作完成前,流不能执行其他写入操作(比如websocket::stream::async_ping、websocket::stream::async_write、websocket::stream::async_write_some或websocket::stream::async_close)。
而且我之前在社区的另一个问题里得到的回答也明确提到:async_ping、async_close和async_write这类操作不能互相竞争,必须按顺序依次执行。
新版Boost文档(1.81.0)的模糊之处
但让我困惑的是,到了Boost 1.81.0的新版文档里,async_ping和async_close的说明中完全删掉了“不能同时发起竞争写入操作”的约束要求——相关的互斥提示完全从文档里消失了。
我的核心疑问
原本旧版文档加社区回答已经把规则讲得很明白,但新版文档的这个变化让我犯嘀咕:到底是Boost Beast在新版本里修改了底层实现,允许这些异步写入操作并发发起了?还是文档只是不小心遗漏了这个关键约束?我到底该遵循旧版的互斥要求,还是按新版文档的隐含逻辑来操作?
内容来源于stack exchange
相关产品推荐
相关产品推荐

