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

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

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

10 ответов

22 просмотра

Нет

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. У вас мув...

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

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

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

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
что за асемблер кста?
Shvabrikk Nya
19
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
всем привет. реально ли понять чем в процессе занята память? delphi/linux, процесс свой
Handatros
12
embassy это топ фреймворк для эмбеддед на данный момент?
AS Sarb
23
Ребята, я 3 дня как вкатился в ардуино Думал на прогрессивном молодом языке Rust попилить что-нибудь А как-то грустно с библиотеками оказалось. Не подскажете почему так? Если...
AS Sarb
18
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
Коллеги, а не могли бы вы подсказать, как происходит оптимизация кода при выполнении кода julia? (Точнее, как управлять уровнем оптимизации, аналогично LLVM/GCC). Потому что...
Илья Гаража
5
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
This automated cryptocurrency trading system uses intelligent algorithms to buy low and sell high on leading crypto exchanges. Many users have already enjoyed significant prof...
Endu Wako
1
Карта сайта