gpt4 book ai didi

c++ - Boost::Beast 非阻塞读取 Websockets?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:14 33 4
gpt4 key购买 nike

我们有一个完全同步的应用程序,并且永远是因为它基本上是一个命令行解释器,用于向我们的硬件发送低级命令,并且您不能同时向硬件发送两个命令。对于此配置,我将只有 1 个客户端套接字以同步方式运行,一个命令到服务器,它与硬件通信,并将值发送回客户端,但据我所知,目前 async_read 是唯一的方法非阻塞读取。

通过 Beast 获得非阻塞读/写的最佳方法是什么?例如,在 Windows 中的 TCP 和串行中,您有办法查看缓冲区以查看数据是否已准备好被访问,如果有,您可以发出读取命令,因为它不会阻塞,因为数据在那里。不确定我是否只是缺少 Beast 中的这个功能,尽管我会说如果可能的话拥有这样的功能会很好。

无论如何,基于此我有一个问题

首先,我能否以协程为例,而不是使用 yield,创建并传递一个 read_handler 函数?

我已经采用了协程示例,并将函数构建到我的类中,并使用了来自该线程答案的完全相同的 read_handler。 How to pass read handler to async_read for Beast websocket?

它按他说的编译,但是设置断点永远不会在接收到数据时触发。

我真的不需要像异步示例那样的完整异步功能,将其推送到不同的线程中,事实上这让我的生活更加困难,因为应用程序的其余部分不是异步的。而且因为我们允许来自各种来源(键盘/TCP/串行/文件)的输入,所以我们不能阻止等待数据。

最佳答案

What is the best way to get a non blocking read/write via Beast?

由于 websocket 流的实现方式,无法支持非阻塞套接字模式。

can I take the Coroutine example and instead of using yield, to create and pass it a read_handler function?

如果您想使用完成处理程序,我建议您不要从协程示例开始,而是从异步示例之一开始,因为这些已经被编写为使用完成处理程序。

关于c++ - Boost::Beast 非阻塞读取 Websockets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989785/

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