Libwebsockets는 보안을 염두에 두고 가볍고 구성 가능하며 확장 가능하고 유연한 방식으로 http/1 , http/2 , websockets , MQTT 및 기타 프로토콜용 클라이언트와 서버를 제공하는 사용이 간편한 MIT 라이센스 순수 C 라이브러리입니다. cmake를 통해 쉽게 구축하고 교차 구축할 수 있으며 임베디드 RTOS부터 대량 클라우드 서비스까지의 작업에 적합합니다.
JSON, CBOR, JOSE, COSE와 같은 다양한 경량 보조 구현을 지원하고 OpenSSL, MbedTLS v2 및 v3를 즉시 지원합니다. 이벤트 루프 공유, libuv, libevent, libev, sdevent, glib 및 uloop 지원과 사용자 정의 이벤트 라이브러리에 관해서는 매우 사교적입니다.
다양한 시나리오에 대한 100개 이상의 독립적인 최소 예제, 잘라내기 및 붙여넣기를 위한 CC0 라이선스(공개 도메인)를 통해 빠르게 시작할 수 있습니다.
다양한 주제에 대한 많은 README가 있습니다.
우리는 푸시당 엄청난 양의 CI 테스트를 수행하며 현재 30개 플랫폼에서 582개 빌드를 수행합니다. lws CI 랙을 확인하고 lws 기반 Sai를 사용하여 모든 테스트를 조정하는 방법에 대해 읽어보세요.
HTML + CSS를 사용하여 EPD 또는 TFT/OLED 디스플레이를 구동하고 싶으십니까? ESP32만 있나요?
필요한 경우 원격 JPEG, PNG, HTML, RGBA 구성, 감마, 오류 확산을 원하십니까?
프레임 버퍼에 대한 힙이 충분하지 않기 때문에 라인 버퍼로 실시간 렌더링합니까?
여기 좀 보세요...
Felipe Gasper 덕분에 이제 lws에 대한 perl 바인딩을 metacpan에서 사용할 수 있습니다. 이는 lws의 최근 일반 이벤트 루프 지원을 사용하여 lws를 기존 perl 이벤트 루프의 게스트로 사용합니다.
lws의 Secure Streams 지원은 몇 년 전에 도입되었습니다. 이는 프로토콜 및 엔드포인트 정보와 같은 연결 정책을 별도의 JSON 정책 파일로 분리하고 코드 거래를 통해 연결을 단순화하는 lws wsi
수준 API에 대한 상위 수준 인터페이스입니다. 페이로드 포함; 유선 프로토콜의 세부 사항은 가능한 한 많이 숨기거나 정책으로 이동하므로 유선 프로토콜이 변경되더라도 사용자 코드는 거의 동일합니다.
사용자 코드는 "스트림 유형 이름"으로 SS를 생성하도록 요청하며 정책의 동일한 이름으로 세부 정보(프로토콜, 엔드포인트 등)에 따라 생성됩니다.
엔드포인트와 같은 주요 정책 항목에는 메타데이터를 통해 런타임 적응을 처리하기 위한 ${metadata-name}
문자열 대체가 포함될 수 있습니다. h1, h2, ws 및 mqtt가 지원됩니다.
wsi
api의 상위 계층인 SS는 기존 wsi 수준 기능에 액세스할 수 있는 더 높은 수준의 방법을 제공하며 두 종류의 API는 모두 계속 지원됩니다. 보안 스트림은 단일 wsi보다 수명이 길기 때문에 SS가 자체적으로 재시도를 조정할 수 있습니다. SS 기반 사용자 코드는 일반적으로 wsi 계층보다 훨씬 작고 유지 관리가 더 쉽습니다.
메인 브랜치에서는 이전 예제를 ./minimal-examples-lowlevel
로 옮겼으며 더 많은 사례를 SS 기반 예제로 이식하기 시작했습니다.
특징 | "낮은 수준" WSI 방식 | 보안 스트림 방식 |
---|---|---|
컨텍스트 만들기 | 암호 | 같은 |
루프 지원, sul 스케줄러 | 기본, 이벤트 라이브러리 | 같은 |
통신 모드 지원 | 클라이언트, 서버, 원시 | 같은 |
프로토콜 지원 | h1, h2, ws, mqtt(클라이언트) | 같은 |
TLS 지원 | mbedtls(v3 포함), openssl(v3 포함), Wolfssl, Boringssl, libressl | 같은 |
직렬화 가능, 프록시 가능, 다중화 가능, 전송 가능 | 아니요 | 예 |
연결당 자동 할당된 사용자 개체 | lws_protocols에 지정된 pss | ss info 구조체에 지정됨 |
연결 사용자 API | 프로토콜별 lws_protocols cbs (> 100) | SS API(rx, tx, 상태 콜백만 해당) |
적응 전송 | lws_callback_on_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 정책 + 공급자가 지원되는 경우 자동 교체, 그렇지 않은 경우 코드 |
Secure Streams API는 직렬화 가능 하며, 정확히 동일한 클라이언트 코드가 예상한 것과 동일한 프로세스에서 직접 연결을 이행하거나 Unix 도메인 또는 TCP 소켓 연결을 통해 정책을 소유한 SS 프록시에 작업, 메타데이터 및 페이로드를 전달할 수 있습니다. 중앙에서 이행됩니다. 이를 통해 예를 들어 단일 연결을 공유하는 다양한 프로세스의 h2 스트림이 허용됩니다.
직렬화된 SS는 UART와 같은 일반 전송을 통해 이동할 수도 있습니다. UART 전송을 사용하여 RPi Pico에서 UART 전송 SS 프록시로의 Binance 예시를 구현하는 예가 제공됩니다. 여기서 pico 자체에는 네트워크 스택, TLS, 압축 또는 wss 스택이 없습니다. 하지만 마치 그랬던 것처럼 엔드포인트와 주고받을 수 있습니다.
선택적인 lws_trasport_mux
는 UART 전송과 SSPC 계층 사이에 삽입되어 단일 파이프가 많은 개별 SS 연결을 전달할 수 있도록 하는 데 사용됩니다.
사용자 SS 코드는 동일하지만 전송, 다중화 및 이행됩니다.
변경 로그 보기
lws에 대한 초기 커밋은 11년 전인 2021년 10월 28일이었고 많은 작업이 있었습니다. 총 4.3K개의 패치가 있으며 누적 800KLOC에 도달합니다(이것은 저장소의 크기가 아니라 수년에 걸쳐 패치로 인해 몇 개의 소스 라인이 변경되었는지를 나타냅니다).
다행스럽게도 수년에 걸쳐 그 중 ~15%가 404명의 기여자가 기여한 것으로 밝혀졌습니다. 그다지 나쁘지는 않습니다. 패치를 제공해 주신 모든 분들께 진심으로 감사드립니다.
오늘날 FAANG의 일부를 포함하여 최소 수천만 개의 장치 및 제품 기능이 lws를 사용하여 통신을 처리합니다. Google은 이제 Android 소스의 일부로 lws를 포함합니다.
이는 경량 웹소켓 클라이언트 및 서버를 위한 libwebsockets C 라이브러리입니다. 지원을 받으려면 다음을 방문하세요.
https://libwebsockets.org
다음 프로젝트 메일링 리스트에 가입하는 것을 고려해 보세요.
https://libwebsockets.org/mailman/listinfo/libwebsockets
git에서 최신 버전의 라이브러리를 얻을 수 있습니다.
개발용 Doxygen API 문서: https://libwebsockets.org/lws-api-doc-main/html/index.html