Правильный способ прочитать и записать данные для Boost :: Beast :: WebSocket :: StreamC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Правильный способ прочитать и записать данные для Boost :: Beast :: WebSocket :: Stream

Сообщение Anonymous »

Когда мы записываем данные в простой сокет или SSL :: Stream , рекомендуется использовать очередь сообщений для отправки данных. В этом случае я сохраняю сообщения в очереди типа std :: queue и, как правило, использую следующую реализацию:

Код: Выделить всё

template
class io : public std::enable_shared_from_this
{
public:
io(socket_t socket) : m_socket(std::move(socket)) {}

void start()
{
read();
}

void write(std::string data)
{
bool write_in_progress = !m_write_queue.empty();
m_write_queue.push(std::move(data));
if (!write_in_progress)
{
do_write();
}
}

void close()
{
m_socket.close();
}

private:
socket_t m_socket;
std::array m_buffer;
std::queue m_write_queue;

void read()
{
auto self = this->shared_from_this();

m_socket.async_read_some(boost::asio::buffer(m_buffer),
[this, self](boost::system::error_code ec, std::size_t bytes_transferred)
{
if (!ec)
{
std::string data(m_buffer.data(), bytes_transferred);
read();
}
});
}

void do_write()
{
auto self = this->shared_from_this();

boost::asio::async_write(m_socket, boost::asio::buffer(m_write_queue.front().c_str(), m_write_queue.front().size()),
[this, self](boost::system::error_code ec, std::size_t /*length*/)
{
if (!ec)
{
m_write_queue.pop();
if (!m_write_queue.empty())
{
do_write();
}
}
});
}
};
Мой вопрос: как написать данные для Boost :: Beast :: WebSocket :: Stream Асинхронно? Должен ли я создать очередь, в которой каждый элемент Boost :: Beast :: flat_buffer или сделать это другим? Boost :: Beast :: WebSocket :: Stream . Я думаю, для чтения мне нужно использовать Boost :: Beast :: FLAT_BUFFER . Однако я не знаю, нужно ли мне очистить этот буфер после каждой операции чтения, если этот буфер является полем класса?

Подробнее здесь: https://stackoverflow.com/questions/796 ... cketstream
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка Stream_impl.hpp: 367: 13 В функции 'Bool Boost :: Beast :: WebSocket :: Stream <<<Template-Parameter-1-1>, <Anony
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Что именно Boost :: Beast :: WebSocket :: Stream :: set_option метод делает
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Пример Websocket boost/beast с клиентом/сервером
    Anonymous » » в форуме C++
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • Пример Websocket boost/beast с клиентом/сервером
    Anonymous » » в форуме C++
    0 Ответы
    58 Просмотры
    Последнее сообщение Anonymous
  • Сервер Boost.Beast WebSocket - «Ошибка чтения: операция ввода-вывода была прервана» при подключении клиента
    Anonymous » » в форуме C++
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»