问题标签 [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.
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 to
pthread_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 to
pthread_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 to
pthread_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 to
pthread_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 to
pthread_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 to
pthread_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 to
pthread_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 吗?
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。
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 是不可能的吗?谢谢你。
boost-asio - 带有 Beast 的 Oauth 服务器
我知道 Beast 是一个低级库,并且没有设计内置 OAuth。但是,我必须通过哪些选项为基于 Beast 的服务器提供 OAuth 身份验证?除了在它之上实现 OAuth(我宁愿避免),我还有什么其他的可能性来实现这一点?例如,有没有一种好方法可以将一些现有的身份验证服务器(如 Keycloak)集成为外部实例?
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 握手有关,但我检查了会话关闭,似乎没问题。
先感谢您。
tcp - boost beast websocket服务器读取错误代码文件结束和操作取消
我正在尝试按照此 boost beast 示例中的描述设置 websocket 服务器。
一切正常,除了读取的 websocket 流引发意外的系统错误,错误代码为“文件结束”和“操作已取消”
客户端连接到此服务器后,服务器开始读取来自客户端的传入消息
ws->读取(缓冲区);
有时,会捕获并打印一个 End of file system_error 和许多操作已取消的系统错误,如下所示:
我四处搜索,文件结束可能是由底层 tcp 套接字关闭引起的,但问题是断开连接经常发生,这没有意义。究竟什么会导致操作取消系统错误?
image - 客户端(javascript)无法使用 boost beast 和 opencv 从服务器接收图像或二进制文件
我使用了 boost::beast Web 服务器异步的示例之一来使用 websocket 与客户端 javascript 进行通信。我正在尝试做简单的接收图像并将其写入服务器端。
我在服务器端收到的结果是损坏的 jpg 图像。先感谢您。
客户端(javascript)
服务器端
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
c++ - boost::beast 同步 http 客户端超时
我正在改编Boost Beast 示例中的同步 HTTP 客户端。不幸的是,示例客户端不包含超时选项,有时会卡在我的工作负载中。我尝试添加超时
在调用写/读操作之前,但那些似乎只在使用 async_read/write 时起作用。从我的发现看来,基本的 boost asio 似乎只支持异步操作的超时。所以我的问题是,野兽是否有能力在阻塞的连接/读/写调用上使用超时。
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
我如何确保这一切正常?如何从套接字缓冲区中检索字符串值?