Boost :: Beast двунаправленный поток Beast (C ++)

Я изучаю использование библиотеки веб-сокетов Boost :: Beast для создания асинхронного двунаправленного канала для передачи данных между сервером и клиентом. Я использовал некоторый код из асинхронного примера (я могу опубликовать его позже, если это необходимо, сейчас у меня нет доступа к нему). В настоящее время у меня есть класс, который создает несколько потоков, работающих под SocketListener. Когда клиент подключается, он создает Session shared_ptr для выполнения асинхронных функций чтения и записи. Проблема в том, что этот объект сеанса будет записывать только когда клиент отправил мне сообщение. Я ищу реализацию, которая позволяет моему серверу писать по требованию всем клиентам, подключенным к нему, а также прослушивать входящие данные из этих соединений.

Это возможно? Я использую неправильную технику для этого? Другой способ, который, хотя я могу предположить, может быть достижимым, — это иметь входящий веб-сокет и исходящий веб-сокет. Входящий позволил бы клиенту сбросить конфигурации для сервера, а исходящий просто контролировал бы очередь сообщений и делал бы асинхронную запись, если сообщение доступно.

Спасибо!

1

Решение

Это возможно?

да

Я использую неправильную технику для этого?

нет

Другой способ, который, хотя я могу предположить, что это может быть достигнуто, состоит в том, чтобы иметь входящий веб-сокет и и исходящий веб-сокет, и Нет соответственно.

В этом нет необходимости, поток веб-сокетов является дуплексным. Вы можете читать и писать одновременно.

outgoing будет просто отслеживать очередь сообщений и выполнять асинхронную запись, если сообщение доступно.

Это правильный подход, но вы можете сделать это в том же объекте Session, который также обрабатывает операции чтения.

Вот пример, который читает непрерывно и может также писать полный дуплекс: https://github.com/vinniefalco/CppCon2018

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector