Libwebsockets — это простая в использовании, лицензированная по лицензии MIT, чистая библиотека на языке C, предоставляющая клиент и сервер для протоколов HTTP/1, HTTP/2, WebSockets, MQTT и других протоколов с учётом безопасности, легковесности, конфигурирования, масштабируемости и гибкости. Она легко собирается и пересобирается через CMake и подходит для задач от встраиваемых систем реального времени до массового облачного обслуживания.
Эта библиотека поддерживает множество легковесных вспомогательных реализаций для таких вещей как JSON, CBOR, JOSE, COSE и поддерживает OpenSSL и MbedTLS версий 2 и 3 прямо из коробки для всего. Библиотека очень дружелюбна к событийным циклам, поддерживающим libuv, libevent, libev, sd_event, 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 была представлена несколько лет назад, это более высокий уровень интерфейса к базовым API уровня WSI в lws, который упрощает соединяемость путём разделения политики соединения, такой как протокол и конечная точка информации, в отдельный JSON файл политики, и просто имеет код, работающий с данными; как можно больше деталей протокола передачи скрыты или перемещены в политику, так что код пользователя почти одинаков даже если протокол передачи меняется.
Код пользователя просто запрашивает создание SS по имени "streamtype name", которое создаётся согласно деталям (протокол, конечная точка и т.д.) под тем же именем в политике.
Основные записи политики, такие как конечная точка, могут содержать строковые замены ${metadata-name}
, чтобы обрабатывать адаптацию во время выполнения через метаданные. Поддерживаются H1, H2, WS и MQTT.
Как слой поверх базовых API уровня WSI, защищённые потоки предоставляют более высокий уровень доступа к уже имеющимся возможностям уровня WSI, оба типа API будут продолжать поддерживаться. Защищённые потоки являются долгоживущими по сравнению с одним WSI, поэтому SS может самостоятельно координировать повторные попытки. Код пользователя на основе SS обычно значительно меньше и более поддерживаемым, чем код уровня WSI.
В основной ветке я переместил старые примеры в ./minimal-examples-lowlevel
и начал портировать большинство случаев оттуда в примеры на основе SS.
|---|---|---| |Создание контекста|код|такой же| |Поддержка цикла событий, планировщика sul|по умолчанию, библиотеки событий|такой же| |Поддержка режима связи|клиент, сервер, сырой|такой же| |Поддержка протоколов|h1, h2, ws, mqtt (клиент)|такой же| |Поддержка TLS|mbedtls (включая v3), openssl (включая v3), wolfssl, boringssl, libressl|такой же| |Сериализация, прокси, мультиплексирование, транспортирование|нет|да| |Автоматически выделенный объект пользователя на соединении|pss указано в lws_protocols|Указано в структуре ss_info| |API объекта пользователя соединения|Протокольно специфичные lws_protocols cb (> 100)|SS API (rx, tx, состояния cb только)| |Адаптация отправки|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 политика, Автоматическое| |Поток как длинное ожидание|код|JSON политика| |Аутентификация|код|JSON политика + автоматический поворот, если поддерживается поставщиком, иначе код|
API Secure Streams также сериализованы, точно такой же клиентский код может выполнять соединение напрямую в том же процессе, как вы бы ожидали, или передавать действия, метаданные и данные до SS Прокси, владеющего политикой через Unix Domain или TCP сокетное соединение для выполнения центрально. Это позволяет, например, потокам h2 из разных процессов использовать одну связь.
Сериализованные SS также могут путешествовать через общие транспорты, такие как UART, предоставлена пример реализации примера Binance на RPi Pico с транспортом UART до прокси-прокси-транспорта UART, где сам Pico не имеет сетевого стека, TLS, сжатия или WSS стека, но может отправлять и получать данные до и от конечной точки, как будто он имел бы.
Необходимый lws_transport_mux
используется для внесения промежуточного звена между транспортом UART и уровнем SSPC, позволяя одному каналу нести многие отдельные соединения SS.
Код пользователя SS остаётся таким же, независимо от того, как он транспортируется, мультиплексируется и выполняется.
Чтобы узнать подробнее, обратитесь к логу изменений
Первая коммита для lws будет иметь место 11 лет спустя с 28 октября 2021 года, это было много работы. Всего 4300 патчей, затронувших 800000 строк кода накопительно (это не размер в репозитории, но количество строк кода, изменённых патчами за годы).
Удовлетворительно, оказывается, что за эти годы около 15% этого было предоставлено 404 участниками: это совсем неплохо. Большое спасибо всем, кто предоставляет патчи.
Сегодня хотя бы десятки миллионов устройств и продуктов используют lws для обработки своих коммуникаций, включая несколько от FAANG; Google теперь включает lws как часть источников Android.
Это библиотека libwebsockets на языке C для легковесных клиентов и серверов WebSocket. Для получения поддержки посетите
и рассмотрите возможность присоединения к списку рассылки проекта по адресу
https://libwebsockets.org/mailman/listinfo/libwebsockets
Вы можете получить последнюю версию библиотеки из git:
Документация Doxygen для разработки: https://libwebsockets.org/lws-api-doc-main/html/index.html
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )