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

linux - Visual Studio linux项目的boost链接错误

我在通过 Visual Studio linux 项目编译 asio 代码时遇到问题。我不断收到以下链接错误:

链接对象

1>D:\C++\test_beastboost\test_beastboost\obj\x64\Debug\main.o:错误:在函数boost::asio::detail::posix_event::posix_event()': 1>/usr/local/include/boost/asio/detail/impl/posix_event.ipp(42): error : undefined reference topthread_condattr_setclock' 1>D:\C++\test_beastboost\test_beastboost\obj\x64\Debug\main.o:错误:在函数boost::asio::detail::posix_thread::~posix_thread()': 1>/usr/local/include/boost/asio/detail/impl/posix_thread.ipp(35): error : undefined reference topthread_detach' 1>D:\C++\test_beastboost\test_beastboost\obj\x64\Debug\main.o 中:错误:在函数boost::asio::detail::posix_thread::join()': 1>/usr/local/include/boost/asio/detail/impl/posix_thread.ipp(42): error : undefined reference topthread_join' 1>D:\C++\test_beastboost\test_beastboost\obj\x64\Debug\main. o:错误:在函数 boost::asio::detail::posix_thread::start_thread(boost::asio::detail::posix_thread::func_base*)': 1>/usr/local/include/boost/asio/detail/impl/posix_thread.ipp(60): error : undefined reference topthread_create' 1>D:\C++\test_beastboost\test_beastboost\obj\x64\Debug\main.o 中:错误:在函数 boost::asio::detail::posix_signal_blocker::posix_signal_blocker()': 1>/usr/local/include/boost/asio/detail/posix_signal_blocker.hpp(43): error : undefined reference topthread_sigmask'1>D:\C++\test_beastboost\test_beastboost\obj\x64\ Debug\main.o:错误:在函数中 boost::asio::detail::posix_signal_blocker::~posix_signal_blocker()': 1>/usr/local/include/boost/asio/detail/posix_signal_blocker.hpp(50): error : undefined reference topthread_sigmask' 1>D:\C++\test_beastboost\test_beastboost\obj\x64\Debug\main.o:错误:在函数中std::thread::thread<std::_Bind<void (*(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::executor>))(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::executor>&)>>(std::_Bind<void (*(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::executor>))(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::executor>&)>&&)': 1>/usr/include/c++/5/thread(137): error : undefined reference topthread_create' 1>collect2 : 错误 : ld 返回 1 退出状态

我已经编译了 boost 1_70,它们位于 usr/local/include/boost 和 usr/local/lib 中。

对于我的链接器,我有以下内容:

-L/usr/local/lib/ -lboost_system

我也尝试添加 -lboost_thread 但无论如何我都在使用标准库线程..

有什么建议么?

我应该在 ubuntu 上重新编译我的 boost 吗?

0 投票
1 回答
407 浏览

boost-asio - Boost Async Websocket 服务器问题

我已经通过 boost.beast 编写了一个异步 websocket。但是当我尝试运行它时,我无法连接它。

服务器代码如下。当我尝试连接我的 websocket 服务器时,我的 chrome 显示连接状态。当我通过 VS2017 进行调试时,它永远不会遇到 run() 中的 lambda 表达式。

当我尝试在 Chrome 的控制台上连接它时。连接需要很长时间,然后显示失败。


所以我改回来,作为 boost.It 的例子。

我有两个问题:

1.为什么我使用 lambda,它会 SOF ,但示例不会。2.当我使用while()时,它不起作用,为什么?lambda 表达式和 std::bind() 之间有什么不同吗?


那么另一个问题,下面的两个代码块有什么不同?

当我使用最上面的那个时,它返回 error_code 995。

0 投票
1 回答
1215 浏览

c++ - Boost::Beast : 带有 websocket 管道的服务器

我正在编写一个带有 boost beast 1.70 和 mysql 8 C 连接器的 c++ websocket 服务器。服务器将同时连接多个客户端。特殊性是每个客户端将连续向服务器执行 100 个 websocket 请求。对于我的服务器,每个请求都是“cpu light”,但服务器对每个请求执行“时间繁重”的 sql 请求。

我已经使用 websocket_server_coro.cpp 示例启动了我的服务器。服务器步骤是:

1)一个websocket读取

2)一个sql请求

3)一个websocket写

问题是对于给定的用户,服务器在第 2 步被“锁定”,直到这一步和第 3 步完成后才能读取。因此,这 100 个请求被依次解决。这对我的用例来说太慢了。

我已经读过 boost beast 不可能进行非阻塞读/写。但是,我现在要做的是在协程中执行 async_read 和 async_write 。

问题是带有 async_write 的行会抛出错误:

void boost::coroutines::detail::pull_coroutine_impl::pull(): 断言`!is_running()' 失败。

如果将此行替换为sync_write,它可以工作,但对于给定用户,服务器保持顺序。我试图在单线程服务器上执行此代码。我还尝试对 async_read 和 async_write 使用相同的链。仍然有断言错误。

这样的服务器对于 websocket 的 boost beast 是不可能的吗?谢谢你。

0 投票
0 回答
75 浏览

boost-asio - 带有 Beast 的 Oauth 服务器

我知道 Beast 是一个低级库,并且没有设计内置 OAuth。但是,我必须通过哪些选项为基于 Beast 的服务器提供 OAuth 身份验证?除了在它之上实现 OAuth(我宁愿避免),我还有什么其他的可能性来实现这一点?例如,有没有一种好方法可以将一些现有的身份验证服务器(如 Keycloak)集成为外部实例?

0 投票
1 回答
848 浏览

c++ - 使用 boost beast 和 openssl 的 async_handshake 内存泄漏

我正在使用 OpenSSL 1.1.1b 和 Boost 1.68 使用 https 创建一个简单的服务器。

我遵循了 boost beast 提供的示例,尤其是高级服务器 flex

该应用程序似乎工作正常。我可以接受 https 会话和 wss 会话。

问题是当我退出应用程序时,Visual Leak Detector 发现 16 个内存泄漏的目标是:

我从原始的 boost beast 代码修改了 http 会话的模式,但它应该执行完全相同的事情。

我试图了解内存泄漏是否会根据连接数增加,但似乎不是。我不明白如何摆脱这个问题。

按照我使用的代码。首先是一个基于 http session 的类

这里的实现:

https会话:

最后的实施

Visual Leak Detector 为我提供以下信息:

在一些泄漏中,我也有:

c:\usr\work\abc_repo\ext\boost_1_68_0\boost\asio\ssl\detail\impl\engine.ipp (290): abc.exe!boost::asio::ssl::detail::engine::do_accept

当然似乎与 ssl 握手有关,但我检查了会话关闭,似乎没问题。

先感谢您。

0 投票
1 回答
1024 浏览

tcp - boost beast websocket服务器读取错误代码文件结束和操作取消

我正在尝试按照此 boost beast 示例中的描述设置 websocket 服务器。

一切正常,除了读取的 websocket 流引发意外的系统错误,错误代码为“文件结束”和“操作已取消”

客户端连接到此服务器后,服务器开始读取来自客户端的传入消息

ws->读取(缓冲区);

有时,会捕获并打印一个 End of file system_error 和许多操作已取消的系统错误,如下所示:

我四处搜索,文件结束可能是由底层 tcp 套接字关闭引起的,但问题是断开连接经常发生,这没有意义。究竟什么会导致操作取消系统错误?

0 投票
1 回答
132 浏览

image - 客户端(javascript)无法使用 boost beast 和 opencv 从服务器接收图像或二进制文件

我使用了 boost::beast Web 服务器异步的示例之一来使用 websocket 与客户端 javascript 进行通信。我正在尝试做简单的接收图像并将其写入服务器端。

我在服务器端收到的结果是损坏的 jpg 图像。先感谢您。

客户端(javascript)

服务器端

0 投票
1 回答
497 浏览

http - Boost Beast websocket 服务器异步接受失败,缓冲区溢出

我通过 boost asio websocket 编写了一个 websocket 服务器。当我尝试将它与 chrome 连接时,它总是说连接失败。并且日志显示缓冲区溢出。特别是在我打开很多网站之后。

[2019-06-21 16:40:45.071345]-[0x00003130]-[error]:[NormalSession.cpp:75] 接受器异步接受失败,ec = beast.http:7,msg = 缓冲区溢出

那么为什么缓冲区溢出呢?以及如何解决?


完整代码

iListener.h

iListener.cpp

正常监听器.h

正常监听器.cpp

iSession.hpp

正常会话.h

正常会话.cpp

0 投票
2 回答
2466 浏览

c++ - boost::beast 同步 http 客户端超时

我正在改编Boost Beast 示例中的同步 HTTP 客户端。不幸的是,示例客户端不包含超时选项,有时会卡在我的工作负载中。我尝试添加超时

在调用写/读操作之前,但那些似乎只在使用 async_read/write 时起作用。从我的发现看来,基本的 boost asio 似乎只支持异步操作的超时。所以我的问题是,野兽是否有能力在阻塞的连接/读/写调用上使用超时。

0 投票
2 回答
671 浏览

c++ - Boost-Beast异步Web套接字服务器-客户端异步读写不在控制台上写入输出

我正在尝试异步Web 套接字服务器的 Boost Beast 示例-客户端

我正在运行服务器和客户端,如下所示,

server.exe 127.0.0.1 4242 1

client.exe 127.0.0.1 4242 "Hello"

如果一切正常,我相信它应该在服务器命令提示符上打印“Hello”

下面是代码

ws_.write() 没有在 console 上写任何东西,但是 buffer_data.data() 呈现 00000163E044EE80

我如何确保这一切正常?如何从套接字缓冲区中检索字符串值?