问题标签 [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.
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 一起使用。所以我不知道问题是什么。
c++ - 将 STL 映射存储到 Boost ConstBufferSequence
我正在尝试将 a 存储std::map<enum, int>
在 a 中boost::beast::multi_buffer
。到目前为止,我一直在使用boost::asio::buffer_copy
andboost::asio::buffer
来存储向量和 POD。但是,我找不到存储 STL 映射的方法。
我试过这个:
- 有没有办法将 a 存储
std::map<enum, int>
在 a 中ConstBufferSequence
?(因为boost::asio::buffer_copy
需要一个) - 如果没有,是否有任何解决方法可以将 a 存储
std::map<enum, int>
在 a 中boost::beast::multi_buffer
?
谢谢!
c++11 - boost beast async_write 显着增加了内存占用
我目前正在试验 boost beast 库,现在对它的内存占用感到非常惊讶。我发现通过使用三种不同的响应类型(字符串、文件、动态),程序大小会增长到 6Mb。
为了更接近原因,我从库中获取了小型服务器示例并将其简化为以下步骤:
当我注释掉三个 self->write_response 行并编译程序并对结果执行 size 命令时,我得到:
当我删除第一次写的评论时,我得到:
删除所有注释后,最终大小变为:
现在的问题是:
难道我做错了什么?
有没有办法减小尺寸?
更新
真正的 process_request 看起来像:
提前致谢
c++ - 将 Boost::Beast 用于 CPU 密集型 REST API,我应该使用异步还是同步方式来实现它们以期望更好的延迟?
我正在尝试使用boost::beast
来实现提供一些 REST API 的 Web 服务。这些 API 占用大量 CPU,几乎没有磁盘或数据库 I/O。我的目标是通过 OK 吞吐量优化延迟。我应该使用同步还是异步方式来实现它们?
谢谢!
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
(粗体)的进一步问题
c++ - Boost Beast 在接受期间操纵 http 响应标头
我想在接受期间操纵发送到 websocket 客户端的 http 响应。
我已经阅读了示例和手册,我可以削减请求,检查它是否是 websocket 升级请求,但我无法操纵响应。
最好让 websocket 库来准备响应,让我将其发送出去,然后接管套接字并从那里开始。
c++ - 不能用 boost beast 做 https-request
我正在使用mingw64。
如何使用 boost beast lib 发出 https-request?
我得到了下面的代码,它可以工作,但我收到了答案:“ 400 The plain HTTP request was sent to HTTPS port ”
我应该在这里完成什么来发出 https 请求?已安装 OpenSSL。
api - C++ Url 路由(和可能的解析)
我用 Boost Beast 启动了一个 api 服务器。我使用异步 http 服务器。我的目标是做与 Express.js 相同的事情现在我的路线是这样的:
我想这样路由:
route.get("/mypath", callback) ;
但是怎么做呢?
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?