gpt4 book ai didi

c++ - Boost Beast WebSockets 每次读取有几个不确定的写入

转载 作者:行者123 更新时间:2023-11-30 03:23:47 30 4
gpt4 key购买 nike

在 C++ 中使用 boost/beast websockets

我已经阅读了有关不支持非阻塞读取的 beast websockets 的问题,以及无法检查数据是否可用的事实,并且在单独的线程中进行读取和写入可能不是线程安全的。

然后,我遇到的问题是找出解决此问题的正确方法:

IBM Watson 语音转文本 WebSockets API 允许您在可用时发送音频数据 block (或从现有文件中分段发送)。但是,您不会收到每个 block 的文本回复。

相反,您不断向它发送音频数据,直到它识别出停顿或话语结束,然后它最终发回一些结果。

换句话说,在读取返回任何内容之前,您可能必须执行多次写入操作,并且无法预测您必须执行多少次写入操作。

没有非阻塞读取函数,也没有将阻塞读取放在单独的线程中,我如何继续发送数据,然后仅在结果可用时才检索结果?

最佳答案

不要将缺乏线程安全与缺乏全双工能力相混淆。您可以调用 async_read,然后调用 async_write。这将导致两个“挂起”的异步操作。写入操作将在不久之后完成,读取操作将保持挂起状态,直到收到消息。

Asio 的异步模型是“响应式(Reactive)”的。这意味着您的完成处理程序会在发生某些事情时被调用。您不会“检查数据是否可用”。 Beast在这里并没有重新发明轮子,它采用了Asio的异步模型。如果您了解如何使用 Asio 编写异步网络程序,这些知识将转移到 Beast。

关于c++ - Boost Beast WebSockets 每次读取有几个不确定的写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50191609/

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