Я работаю над приложением, в котором я хочу использовать boost :: beast / asio. Мне нужно получать данные через соединение через веб-сокет и одновременно отправлять запросы в REST API.
В примерах асинхронного клиента boost :: beast websocket / HTTP создается следующая асинхронная операция в обработчиках завершения. Кажется, это вызывает тот же «ад обратного вызова», который я видел в приложениях node.js.
Чтобы избежать этого, я думаю об использовании простого конечного автомата в моем приложении, чтобы решить, какую операцию запустить дальше. Я думаю о том, чтобы в моем приложении был цикл while, где я вызываю poll () для io_context, после чего я запускаю свой код конечного автомата (например, switch (state) {... state = nextState;})
Однако это может создать занятый цикл, в котором основной поток потребляет 100% процессорного времени, пока он постоянно запускает конечный автомат?
Верны ли мои рассуждения, и было бы лучше использовать что-то вроде post (), чтобы поставить в очередь функтор, который продвинет конечный автомат?