Использование веб-сокетов boost / beast в C ++
Я прочитал о проблемах с веб-сокетами beast, не поддерживающими неблокирующее чтение, и о том, что нет способа проверить, доступны ли данные, и что чтение и запись в отдельных потоках, вероятно, не является поточно-ориентированным.
Проблема, с которой я столкнулся, заключается в том, чтобы выяснить правильный подход к этой проблеме:
Интерфейс API WebSockets IBM Watson для преобразования речи в текст позволяет отправлять фрагменты аудиоданных по мере их появления (или частями из существующего файла). Однако вы не получаете текстовые ответы для каждого фрагмента.
Вместо этого вы продолжаете посылать ему аудиоданные до тех пор, пока он не распознает паузу или конец высказывания, а затем, наконец, отправляет обратно некоторые результаты.
Другими словами, вам может потребоваться выполнить несколько записей, прежде чем чтение вернет что-либо, и нет никакого способа предсказать, сколько записей вам придется сделать.
Без неблокирующей функции чтения и без помещения блокирующего чтения в отдельный поток, как мне продолжать отправлять данные, а затем получать результаты только тогда, когда они доступны?