170 похожих чатов

Добрый вечер. Есть вопрос на счет функции websocket::stream::async_read в boost::beast.

В случае если я вызываю его в функции void и функция завершает выходит то что сервер перестает слушать сокет?

10 ответов

6 просмотров

Нет

The end.- Автор вопроса
Maus Grau
Нет

выходит при получении сообщения функция обратного вызова будет вызвана?

The end.- Автор вопроса
Maus Grau
Если все написано правильно, то да

что подразумевается под "правильно"?

The end.
что подразумевается под "правильно"?

Все аргументы переданы правильно, буфер переживает функцию, вызван run и т. п.

The end.- Автор вопроса
Maus Grau
Все аргументы переданы правильно, буфер переживает...

Моя проблема в том что функция handle_connection() не ожидает новых сообщений, не могли бы Вы подсказать примеру проблему? Спасибо. void acceptor_func(asio::io_context& ioc) { tcp::acceptor acceptor(ioc, tcp::endpoint(tcp::v4(), 8090)); tcp::socket socket(ioc); do_accept(acceptor, std::move(socket)); BOOST_LOG_TRIVIAL(trace) << "\ndo_accept() started\n"; ioc.run(); } void handle_connection(websocket::stream<tcp::socket> ws) { BOOST_LOG_TRIVIAL(trace) << "Handling new WebSocket connection"; ws.async_accept([&ws](boost::system::error_code ec) { if (!ec) { // Reading the first message which should contain JWT. boost::beast::flat_buffer buffer; BOOST_LOG_TRIVIAL(trace) << "The first message from the socket received."; ws.async_read(buffer, [&ws, &buffer](boost::system::error_code ec, std::size_t) { if (!ec) { auto data = boost::beast::buffers_to_string(buffer.data()); BOOST_LOG_TRIVIAL(trace) << "Received: " << data; int botid = jwtdecode(data, ""); if (botid != 1) { BOOST_LOG_TRIVIAL(trace) << "ClientConnection class created."; ClientConnection tConnection(std::move(ws)); verified_connections.emplace(botid, std::move(tConnection)); } else { BOOST_LOG_TRIVIAL(trace) << "Connection closed due to policy error."; ws.close(websocket::close_code::policy_error); } } }); } }); } void do_accept(tcp::acceptor& acceptor, tcp::socket socket) { BOOST_LOG_TRIVIAL(trace) << "Waiting for new WebSocket connection..."; acceptor.async_accept(socket, [&acceptor, socket = std::move(socket)](boost::system::error_code ec) mutable { if (!ec) { websocket::stream<tcp::socket> ws(std::move(socket)); BOOST_LOG_TRIVIAL(trace) << "Calling handle_connection()..."; handle_connection(std::move(ws)); } do_accept(acceptor, std::move(socket)); }); }

The end.- Автор вопроса
Maus Grau
Все аргументы переданы правильно, буфер переживает...

Моя проблема в том что функция handle_connection() не ожидает новых сообщений, не могли бы Вы подсказать примеру проблему? Спасибо. void acceptor_func(asio::io_context& ioc) { tcp::acceptor acceptor(ioc, tcp::endpoint(tcp::v4(), 8090)); tcp::socket socket(ioc); do_accept(acceptor, std::move(socket)); BOOST_LOG_TRIVIAL(trace) << "\ndo_accept() started\n"; ioc.run(); } void handle_connection(websocket::stream<tcp::socket> ws) { BOOST_LOG_TRIVIAL(trace) << "Handling new WebSocket connection"; ws.async_accept([&ws](boost::system::error_code ec) { if (!ec) { // Reading the first message which should contain JWT. boost::beast::flat_buffer buffer; BOOST_LOG_TRIVIAL(trace) << "The first message from the socket received."; ws.async_read(buffer, [&ws, &buffer](boost::system::error_code ec, std::size_t) { if (!ec) { auto data = boost::beast::buffers_to_string(buffer.data()); BOOST_LOG_TRIVIAL(trace) << "Received: " << data; int botid = jwtdecode(data, ""); if (botid != 1) { BOOST_LOG_TRIVIAL(trace) << "ClientConnection class created."; ClientConnection tConnection(std::move(ws)); verified_connections.emplace(botid, std::move(tConnection)); } else { BOOST_LOG_TRIVIAL(trace) << "Connection closed due to policy error."; ws.close(websocket::close_code::policy_error); } } }); } }); } void do_accept(tcp::acceptor& acceptor, tcp::socket socket) { BOOST_LOG_TRIVIAL(trace) << "Waiting for new WebSocket connection..."; acceptor.async_accept(socket, [&acceptor, socket = std::move(socket)](boost::system::error_code ec) mutable { if (!ec) { websocket::stream<tcp::socket> ws(std::move(socket)); BOOST_LOG_TRIVIAL(trace) << "Calling handle_connection()..."; handle_connection(std::move(ws)); } do_accept(acceptor, std::move(socket)); }); }

The end.
Моя проблема в том что функция handle_connection()...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

The end.
Моя проблема в том что функция handle_connection()...

1. Как вы поняли что оно не работает? 2. У вас мув сокета в do_accept может произойти раньше вызова async_accept, так как порядок вычисления аргументов не определен. 3. ws не доживает до вызова асинхронной функции

The end.- Автор вопроса
Maus Grau
1. Как вы поняли что оно не работает? 2. У вас мув...

Спасибо огромное за помощь. Проблема исправлена.

Похожие вопросы

Обсуждают сегодня

кто поможет крякнуть чит? (реверс инжиринг) чтобы разблокировать премиум версию
Mёdkinson Medvezhkin
39
давайте за механические клавиатуры потрём, мне тут неучтенных денег упало и их можно потратить на что-то такое, вот думаю про dark project kd87a, кто-то имеет что-то подобное?
Oleg Nosov
24
Подскажите, сейчас что то есть (JS модуль какой-нибудь), что можно использовать для: 1) переваривания javascript codа из html fileа, т.е. разбивки, на переменные, команды, бло...
Iar De
14
А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос по организации кода. Пилю свой велосипед логгер Есть у меня множество уровней сообщений. Я набрасываю сообщения в стринглист, а когда они нужны, вызываю их через функц...
Serjone
21
а в чем профит по сравнению с другими вариантами?
Vyacheslav Olkhovchenkov
10
Диски перестали работать почему-то в Нидерландах тогда. 0кб в сек Никто как я понял не сможет посоветовать vds в Нидерландах ?
Stargrapefruit
16
Мне интересно, скорее людей здесь используют D, Rust, C/C++ для решения реальных прикладных задач за деньги?)
Evil Satanson
19
Приветствую! Вопрос о стилях, новосозданное тестовое приложение, закинул на форму StyleBook, назначил форме этот стиль, в редакторе они отображается. собираю программу, там ни...
Евгений
7
Has anyone experienced Sign in with Apple (with Firebase Authentication) does not provide name or email of the user even when requested with "email" and "fullName" scopes? He...
Sree (𝓣𝓪𝔂𝓵𝓸𝓻'𝓼 𝓥𝓮𝓻𝓼𝓲𝓸𝓷) 🦉 🦉
12
Карта сайта