【问题标题】:Boost Beast WebSockets with several indeterminate writes per readBoost Beast WebSockets 每次读取都有几个不确定的写入
【发布时间】:2018-05-05 16:25:19
【问题描述】:

在 C++ 中使用 boost/beast websockets

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

那么,我的问题是找出解决这个问题的正确方法:

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

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

换句话说,您可能需要执行多次写入,然后读取才会返回任何内容,并且无法预测您将需要执行多少次写入。

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

【问题讨论】:

    标签: c++ boost websocket beast


    【解决方案1】:

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

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

    【讨论】:

    • 举个例子对 BOOST 新手最有利。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2019-02-27
    • 2018-03-26
    • 2017-09-16
    • 2010-11-02
    • 1970-01-01
    • 2015-02-23
    相关资源
    最近更新 更多