Libwebsockets — это простая в использовании, лицензированная по лицензии MIT, чистая библиотека на языке C, предоставляющая клиент и сервер для HTTP/1, HTTP/2, WebSockets, MQTT и других протоколов в безопасном, легковесном, настраиваемом, масштабируемом и гибком виде. Она легко собирается и пересобирается через CMake и подходит для задач от встраиваемых RTOS до массового облачного обслуживания.Библиотека поддерживает множество легковесных вспомогательных реализаций для таких форматов, как JSON, CBOR, JOSE, COSE, а также поддерживает OpenSSL и MbedTLS версий 2 и 3 из коробки для всего. Она очень дружественна по отношению к общей обработке событий, поддерживая libuv, libevent, libev, sdevent, glib и uloop, а также пользовательские библиотеки обработки событий.Более 100 независимых минимальных примеров для различных сценариев, лицензированных по CC0 (общественное достояние) для копирования и вставки, позволяют быстро начать работу.
Есть много README на различные темы.
Мы проводим огромное количество тестирования CI на каждое коммитирование, в настоящее время 582 сборки на 30 платформах.
Вы можете увидеть стойку CI lws и прочитать о том, как lws-основанный Sai используется для координации всех тестов.
Хочешь использовать HTML + CSS для управления EPD или TFT / OLED дисплеем? У тебя только ESP32?
Требуется удалённое отображение JPEG, PNG, HTML, RGBA композиция, гамма, диффузия ошибок при необходимости?
Временная рендеринг в строковый буфер из-за недостатка памяти для буфера кадров?
Спасибо Фелипе Гасперу, теперь доступна привязка Perl для lws на metacpan, она использует недавно добавленную обобщённую поддержку цикла событий в lws, чтобы использовать lws как гостя на существующем цикле событий Perl.
Поддержка защищённых потоков в lws была введена несколько лет назад. Это
высокоуровневый интерфейс к lws wsi
-уровневым api, который упрощает подключение,
сегрегируя политику подключения, такую как протокол и информация о конечной точке,
в отдельный JSON файл политики, и просто имея код, который работает с полезными данными; как можно больше
деталей протокола связи скрыты или перемещены в политику, так что код пользователя почти не меняется, даже если протокол связи изменяется.
Код пользователя просто запрашивает создание SS по "названию потока", оно создаётся в соответствии с деталями (протокол, конечная точка и т.д.) под тем же названием в политике.
Ключевые записи политики, такие как конечная точка, могут содержать строковые
подстановки ${metadata-name}
для обработки адаптаций в реальном времени через метаданные. Поддерживается h1, h2, ws и mqtt.
Как слой на top lws wsi
api, SS предоставляет более высокий уровень доступа к
существующим wsi
-уровневым возможностям. Оба типа API будут продолжать поддерживаться.
Защищённые потоки живут дольше одного wsi
, поэтому SS может координировать
повторные попытки самостоятельно. Код пользователя на основе SS обычно значительно меньше и более поддерживаем, чем код на уровне wsi
.В основной ветке я переместил старые примеры в ./minimal-examples-lowlevel
и начинаю переносить больше случаев оттуда в примеры на основе SS.### Сравнение использования wsi и SS уровня lws|Функция|"низкоуровневый" wsi способ|способ Secure Streams|
|---|---|---|
|Создание контекста|код|одинаково|
|Поддержка циклов, sul планировщика|по умолчанию, библиотеки событий|одинаково|
|Поддержка режима коммуникации|Клиент, Сервер, Чистый|одинаково|
|Поддержка протоколов|h1, h2, ws, mqtt (клиент)|одинаково|
|Поддержка TLS|mbedtls (включая v3), openssl (включая v3), wolfssl, boringssl, libressl|одинаково|
|Сериализуемый, проксируемый, мультиплексируемый, транспортный|Нет|Да|
|Автоматически выделенный объект пользователя на соединение|pss, указанный в lws_protocols|указанный в структуре ss_info|
|API пользователя соединения|Протокол-специфичные lws_protocols cbs (> 100)|SS API (rx, tx, state callbacks только)|
|Адаптация отправки|lws_callback_on_writable() + WRITEABLE|lws_ss_request_write() + tx() cb|
|Буфер отправки|Выбор пользователя + частичная обработка malloc|SS-предоставленный, без частичных|
|Создание виртуальных хостов|код|JSON политика|
|Проверка TLS|пакет сертификатов или код|JSON политика, или пакет сертификатов|
|Переподключение соединения / задержка|код|JSON политика, Автоматически|
|Установка|код|JSON политика, Автоматически|
|Детали конечной точки и протокола|распределены по коду|JSON политика|
|Выбор протокола, конвейер / разделение потока|код|JSON политика|
|Выбор подпротокола ws|код|JSON политика|
|ws двоичный / текстовый|код|JSON политика||Протокол-специфичные метаданные|Протокол-специфичные API в коде (например, lws_hdr)|JSON политика, общие API метаданные в коде|
|Правила валидности соединения|структура|JSON политика, Автоматически|
|Поток как Long Poll|код|JSON политика|
|Аутентификация|код|JSON политика + автоматическая ротация, если поддерживается поставщиком, иначе код|### Сериализованные Secure Streams
API Secure Streams также сериализуемы, точно такой же клиентский код может выполнить соединение напрямую в том же процессе, как вы ожидаете, или передать действия, метаданные и полезные нагрузки SS Proxy, который владеет политикой через Unix Domain или TCP сокетное соединение для центрального выполнения. Это позволяет, например, потокам h2 из разных процессов использовать одно соединение.
Сериализованный SS также может передаваться через общие транспорты, такие как UART. Пример реализации с использованием примера Binance на RPi Pico с транспортом UART показан. Данный пример демонстрирует передачу через прокси-сервер SS для UART-транспорта, где сам RPi Pico не имеет сетевого стека, TLS, сжатия или стека WSS, но может отправлять и принимать данные, как будто бы он имел. Необязательный lws_transport_mux
используется для вставки между транспортным уровнем UART и слоем SSPC, что позволяет одному каналу переносить множество отдельных соединений SS.
Код SS пользователя остается идентичным, независимо от того, как он транспортируется, мультиплексируется и выполняется.
Первый коммит для lws будет отмечен 11-летием 28 октября 2021 года, это было много работы. Всего было сделано 4.3K патчей, затронувших 800KLOC в совокупности (это не размер в репозитории, а количество строк исходного кода, измененных патчами за годы).
Удивительно, что за все эти годы примерно 15% этого было внесено 404 вкладчиками: это неплохо. Большое спасибо всем, кто предоставил патчи.
Сегодня по крайней мере десятки миллионов устройств и функций продуктов зависят от lws для обработки их коммуникаций, включая несколько от FAANG; Google теперь включают lws как часть исходного кода Android.
Это библиотека libwebsockets на языке C для легковесных клиентов и серверов WebSocket. Для поддержки посетите
и рассмотрите возможность присоединения к списку рассылки проекта по адресу
https://libwebsockets.org/mailman/listinfo/libwebsockets
Вы можете получить последнюю версию библиотеки из git:
Документация API Doxygen для разработки: https://libwebsockets.org/lws-api-doc-main/html/index.html
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )