问题标签 [boost-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 回答
359 浏览

c++ - Watson Text-to-Speech via C++ Boost Websockets - “没有这样的主机是已知的”

我无法使用 Boost Beast 库通过 C++ 中的 websockets 连接到 Watson 的 Text-To-Speech 服务

我的代码在端口 80 上与 echo.websocket.org 成功交互,但它不适用于 Watson 的 url。我尝试过使用协议的变体(http(s)、ws(s) 和未指定的(适用于 echo.websocket.com))并且我已经尝试了端口 80 和 443,只是为了确定。

我能够在 Javascript 中成功运行代码,并且使用 Firefox 的内置网络工具,我已经验证它可以在端口 443 上运行。使用完全相同的 URL 和端口号给我以下信息:“没有这样的主机是已知的。”

这是正确建立连接的相关JS代码

以下 C++ 代码理论上可以正常工作,并且可以在端口 80 上与 echo.websocket.org 一起使用,但不能与 Watson 一起使用。

如果 Watson URL 错误,它在 Javascript 中不应该工作。如果 C++ 代码错误,它不应该与 echo.websocket.org 一起使用。所以我不知道问题是什么。

0 投票
1 回答
189 浏览

c++ - 将 STL 映射存储到 Boost ConstBufferSequence

我正在尝试将 a 存储std::map<enum, int>在 a 中boost::beast::multi_buffer。到目前为止,我一直在使用boost::asio::buffer_copyandboost::asio::buffer来存储向量和 POD。但是,我找不到存储 STL 映射的方法。

我试过这个:

  1. 有没有办法将 a 存储std::map<enum, int>在 a 中ConstBufferSequence?(因为boost::asio::buffer_copy需要一个)
  2. 如果没有,是否有任何解决方法可以将 a 存储std::map<enum, int>在 a 中boost::beast::multi_buffer

谢谢!

0 投票
2 回答
259 浏览

c++11 - boost beast async_write 显着增加了内存占用

我目前正在试验 boost beast 库,现在对它的内存占用感到非常惊讶。我发现通过使用三种不同的响应类型(字符串、文件、动态),程序大小会增长到 6Mb。

为了更接近原因,我从库中获取了小型服务器示例并将其简化为以下步骤:

当我注释掉三个 self->write_response 行并编译程序并对结果执行 size 命令时,我得到:

当我删除第一次写的评论时,我得到:

删除所有注释后,最终大小变为:

现在的问题是:

难道我做错了什么?

有没有办法减小尺寸?

更新

真正的 process_request 看起来像:

提前致谢

0 投票
3 回答
1480 浏览

c++ - 将 Boost::Beast 用于 CPU 密集型 REST API,我应该使用异步还是同步方式来实现它们以期望更好的延迟?

我正在尝试使用boost::beast来实现提供一些 REST API 的 Web 服务。这些 API 占用大量 CPU,几乎没有磁盘或数据库 I/O。我的目标是通过 OK 吞吐量优化延迟。我应该使用同步还是异步方式来实现它们?

谢谢!

0 投票
0 回答
541 浏览

c++ - Boost Beast 异步 HTTP 客户端 + std::future

我有一个项目将进行一些网络连接,并希望将底层 Boost Beast HTTP(S) 请求实现包装在期货中。

我从https://www.boost.org/doc/libs/1_69_0/libs/beast/example/http/client/async-ssl/http_client_async_ssl.cpp复制了session该类,并希望将返回类型更改为. 另外,将位置更改为在 Promise中设置结果而不是打印。session::run()std::future<http::response<http::string_body>>// Write the message to standard out

问题是:

  • 将用于生成未来的承诺放在哪里?班员是正确的选择吗?
  • 放在boost::asio::io_context ioc哪里?它是否应该在我自己的应用程序的核心循环中(假设应用程序将在其生命周期内触发多个请求),然后ioc在发出请求时传递对的引用?ioc.run()?- 我需要它不断运行,我应该打开一个专用线程来运行ioc以避免阻塞吗?
  • 如何处理session错误?我想使用std::promise接口并放一个异常以防出现问题 - 基本上fail()用适当的异常替换示例中的所有调用。但我不能只是将一个异常对象放入承诺中,它期望std::exception_ptr- 我应该抛出,立即抓住它并放入std::current_exception()吗?这对我来说似乎是一个糟糕的黑客行为。
  • 如果我没有在程序中明确创建任何线程,这会起作用吗?如果不是,那么查询session所有任务都已完成的对象的好方法是什么?

编辑:添加了关于ioc(粗体)的进一步问题

0 投票
1 回答
337 浏览

c++ - Boost Beast 在接受期间操纵 http 响应标头

我想在接受期间操纵发送到 websocket 客户端的 http 响应。

我已经阅读了示例和手册,我可以削减请求,检查它是否是 websocket 升级请求,但我无法操纵响应。

最好让 websocket 库来准备响应,让我将其发送出去,然后接管套接字并从那里开始。

0 投票
1 回答
1676 浏览

c++ - 不能用 boost beast 做 https-request

我正在使用mingw64。

如何使用 boost beast lib 发出 https-request?

我得到了下面的代码,它可以工作,但我收到了答案:“ 400 The plain HTTP request was sent to HTTPS port

我应该在这里完成什么来发出 https 请求?已安装 OpenSSL。

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 回答
158 浏览

c++ - 如何在 boost beast websocket 中传递模型类型

我正在使用 c++11、野兽库和 IBM 语音转文本 Web 服务。

执行握手时,websocket 接口(连接)需要authentication tokenas 请求标头。

参考Watson文档中可用的此代码,我似乎也必须将模型类型(如果我愿意)作为请求标头传递

还有提到设置“模型”的卷曲请求格式

有人能帮我弄清楚如何在我的 websocket 中传递“模型”(在 c++11 中使用野兽)吗?

这是我传递身份验证令牌的方式: