Я хочу создать веб-приложение, в котором группа пользователей могла бы получать некоторые данные асинхронно всякий раз, когда у бэкэнда C ++ есть что-то новое. Таким образом, в идеале, когда приходит новый пользователь, он будет добавлен в список подписчиков, и всякий раз, когда у бэкэнда C ++ будут новые данные для группы, он будет публиковать их для всех.
libwebsockets похоже, хорошая библиотека для использования с C ++. Единственная проблема заключается в том, что кажется, что он в основном предназначен для системы обратного вызова, поэтому, очевидно, данные предназначены для отправки только в том случае, если клиент запрашивает их.
Я нашел этот пост с похожей проблемой, но я не знаю, является ли это лучшим способом сделать это: Как отправить асинхронные данные через libwebsocket?
Любая помощь будет оценена.
Спасибо.
нашел это!
libwebsockets позволяет транслировать всем подключенным пользователям определенный протокол, используя libwebsocket_callback_on_writable_all_protocol(*protocol)
который запускает LWS_CALLBACK_SERVER_WRITEABLE
это будет обработано функцией обратного вызова протокола, и именно здесь мы могли бы отправить данные.
Поэтому, как правило, я использую свой второй протокол (не http) всякий раз, когда у меня есть данные для трансляции в любой части моего кода с libwebsocket_callback_on_writable_all_protocol(protocols + 1)
и в функции обратного вызова протокола
static int callback_linux_shell(struct libwebsocket_context * context, struct libwebsocket *wsi, enum libwebsocket_callback_reasons reason, void *user, void *in, size_t len) {
switch (reason) {
...
case LWS_CALLBACK_SERVER_WRITEABLE:
libwebsocket_write(wsi, my_data, my_data_size, LWS_WRITE_TEXT);
break;
...
}
}