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

时间:2018-05-05 16:25:20

标签: c++ boost websocket beast

在C ++中使用boost / beast websockets

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

我遇到的问题是找出解决这个问题的正确方法:

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

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

换句话说,在读取任何内容之前,您可能需要进行多次写入,并且无法预测您将需要执行多少次写入。

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

1 个答案:

答案 0 :(得分:2)

不要将缺乏线程安全与缺乏全双工功能混为一谈。您可以拨打async_read,然后拨打async_write来关注它。这将导致两个"待定"异步操作。写操作将在不久之后完成,读操作将保持挂起状态,直到收到消息为止。

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