问题标签 [beast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
243 浏览

c++ - 如何在 boost::beast 上保持 websocket?

在这里引用了有关 boost::beast websocket-async 的文档。

我在 on_read 函数上删除了 "ws_.async_close(websocket::close_code::normal..." 以避免断开连接。

但是野兽 websocket 通过结束 on_read 断开连接。

0 投票
1 回答
1182 浏览

c++ - Boost::Beast Websocket 双向流 (C++)

我正在研究使用 Boost::Beast websocket 库来创建异步双向管道以在服务器和客户端之间传递数据。我利用了异步示例中的一些代码(如果需要,我可以稍后发布一些代码,现在无法访问它)。我目前有一个类,它创建了几个运行 SocketListener 的线程。当客户端连接时,它会创建一个 Session shared_ptr 来执行异步读写功能。问题是,这个会话对象只会在客户端向我发送消息时写出来。我正在寻找一种实现,它允许我的服务器按需写入​​连接到它的所有客户端,并监听来自这些连接的传入数据。

这可能吗?我为此使用了错误的技术吗?我认为这可能实现的另一种方法是拥有一个传入的 websocket 和传出的 websocket。传入将允许客户端删除服务器的配置,传出将仅监视消息队列并在消息可用时执行异步写入。

谢谢!

0 投票
1 回答
1413 浏览

c++ - 提升野兽 websocket 连接关闭处理程序

我是新手,我正在尝试为 websocket 编写一个简单的聊天应用程序。作为参考,我正在使用网站上的websocket-server-sync示例。

我创建了一个存储 websocket::streams 的全局向量,并在创建 websocket 后的 do_session 方法中将其推送到向量中。

每次我读到一条消息时,我都会从这个向量发送给每个人,所以到目前为止它运行良好。但是,当有人关闭连接时(即使它没有正确关闭,例如互联网连接断开),我想从我的向量中删除流对象。我试图在野兽头中寻找“关闭处理程序”或类似的东西,但我找不到任何东西。有没有办法做到这一点?喜欢:

0 投票
2 回答
92 浏览

c++ - 调用不带回调的 boost 函数

我正在使用 boost-beast 库进行 websocket 连接。您可以参考此示例了解正在发生的事情。我使用了相同的示例,但更改了一些内容:

  • 将 theon_handshake(beast::error_code ec)分成三个函数A(beast::error_code ec)B(beast::error_code ec)并且C(beast::error_code ec)

  • B()发送二进制数据,A()C()正在发送文本。

  • A()B()作为回调调用和作为回调B()调用C()

现在我被困在我想要这样做的地方:

这是读取功能:

问题:-请在那里检查功能B()和我的问题。任何建议或答案表示赞赏。

0 投票
2 回答
904 浏览

c++ - 如何使用 boost beast 为 websocket 握手添加自定义标头

如何在与 boost beast 的 WebSocket 协议中发生的第一次握手中发送自定义标头?

我想在我的初始请求“x-custome-id:xxxxx”中使用自定义标头。

0 投票
1 回答
416 浏览

c++ - 发送多个同时请求时,单线程异步系统中野兽增强异步 http 客户端的行为

当在单线程异步系统中发出多个同时请求时,beast boost async http客户端如何在c++11中工作?

用例:

我想同时发送多个异步请求,并为每个请求创建新的 http 客户端。当收到任何请求的响应时,我将调用一个回调函数,该函数会在收到响应 1 秒后删除客户端,以避免任何内存泄漏。但是,即使我为每个请求创建了一个新的客户端对象,系统/代码似乎也会在一些随机数量的同时 http 请求之后挂起。野兽加速是否使用了一些共享资源,因为这种暂停看起来像系统处于无限死锁状态。PS:我也尝试评论这个删除块,但系统的行为也是一样的。

以下是 boost 和编译器版本的规格:

  • 提升:稳定 1.68.0

  • BOOST_BEAST_VERSION 181

clang -v

Thread model: posix

上面的这个函数是一个包装函数,它将为每个请求调用,并且在内部将创建新的 http 异步客户端并在收到响应/错误 1 ​​秒后删除该客户端对象(基本上请求已被处理)。

0 投票
0 回答
948 浏览

api - C++ Url 路由(和可能的解析)

我用 Boost Beast 启动了一个 api 服务器。我使用异步 http 服务器。我的目标是做与 Express.js 相同的事情现在我的路线是这样的:

我想这样路由: route.get("/mypath", callback) ;

但是怎么做呢?

0 投票
1 回答
1390 浏览

c++ - Unable to find the reason for "Broken Pipe" error while sending continuous data chunks through Beast websocket

I am working on streaming audio recognition with IBM Watson speech to text web service API. I have created a web-socket with boost (beast 1.68.0) library in C++(std 11).

I have successfully connected to the IBM server, and want to send a 231,296 bytes of raw audio data to server in following manner.

Expected Result from IBMServer is :

But I am not getting the desired result: rather the error says "Broken pipe"

Here is my code which is an adaptation of the sample example given in beast library.

Foo.hpp

Foo.cpp

Any suggestions here?

0 投票
1 回答
4922 浏览

post - 提升野兽样本发送帖子

我收到以下回复,但我不知道如何识别问题。Fiddler 没有捕获任何东西,所以我相信请求没有被发送出去。

HTTP/1.1 411 Length Required Content-Type: text/html; charset=us-ascii Server: Microsoft-HTTPAPI/2.0 Date: Wed, 22 May 2019 11:15:04 GMT Connection: close Content-Length: 344

我试图遵循我发现的其他示例,但似乎设置正文不再编译。

// error C2679: binary '=': no operator found which takes a right-hand operand of type 'const char *' (or there is no acceptable conversion) req_.body() = "test";

我正在使用为 x64 编译的 Visual Studio 2017,并将 Boost 链接为 DLL。我从野兽样本开始,让“GET”完美地为我工作。我在让“POST”从野兽客户端工作时遇到问题

`

`

  1. 我如何查看作为要发送的数据包生成的野兽?
  2. 如何修复尝试设置正文的编译错误,如其他帖子中所示:request.body() = "bodytext";
  3. 有人可以提供一个使用 post 的示例野兽客户端和服务器吗?
0 投票
2 回答
508 浏览

c++ - string_view 指向另一个字符串

我正在使用 Boost 1.70 并发现了一个相当令人费解的问题,有时 boost::string_view 似乎指向另一个字符串。

这是创建 boost::string_view 的函数调用,如下所示:

这就是prepareError() 方法,它在真正奇怪的事情发生时被调用。第一个版本在构造字符串变量时使用 message.to_string() :

此 json 变量将包含以下字符串,例如:

这真的很奇怪。在调试器中,消息变量包含一个空字符串。正如您从方法调用中看到的那样,这不应该是该字符串的预期结果。

这是相同的方法,唯一的区别是将消息变量(即 string_view)临时分配给 std::string。

这给出了预期的字符串: