Я изучаю использование библиотеки веб-сокетов Boost :: Beast для создания асинхронного двунаправленного канала для передачи данных между сервером и клиентом. Я использовал некоторый код из асинхронного примера (я могу опубликовать его позже, если это необходимо, сейчас у меня нет доступа к нему). В настоящее время у меня есть класс, который создает несколько потоков, работающих под SocketListener. Когда клиент подключается, он создает Session shared_ptr для выполнения асинхронных функций чтения и записи. Проблема в том, что этот объект сеанса будет записывать только когда клиент отправил мне сообщение. Я ищу реализацию, которая позволяет моему серверу писать по требованию всем клиентам, подключенным к нему, а также прослушивать входящие данные из этих соединений.
Это возможно? Я использую неправильную технику для этого? Другой способ, который, хотя я могу предположить, может быть достижимым, — это иметь входящий веб-сокет и исходящий веб-сокет. Входящий позволил бы клиенту сбросить конфигурации для сервера, а исходящий просто контролировал бы очередь сообщений и делал бы асинхронную запись, если сообщение доступно.
Спасибо!
Это возможно?
да
Я использую неправильную технику для этого?
нет
Другой способ, который, хотя я могу предположить, что это может быть достигнуто, состоит в том, чтобы иметь входящий веб-сокет и и исходящий веб-сокет, и Нет соответственно.
В этом нет необходимости, поток веб-сокетов является дуплексным. Вы можете читать и писать одновременно.
outgoing будет просто отслеживать очередь сообщений и выполнять асинхронную запись, если сообщение доступно.
Это правильный подход, но вы можете сделать это в том же объекте Session, который также обрабатывает операции чтения.
Вот пример, который читает непрерывно и может также писать полный дуплекс: https://github.com/vinniefalco/CppCon2018
Других решений пока нет …