libwebsockets:基于 C 语言的轻量级网络协议库项目

canonical libwebsockets.org networking library

分支77Tags345

CI 状态 Coverity Scan 构建状态 CII 最佳实践

Libwebsockets

Libwebsockets 是一个易于使用的 MIT 许可纯 C 库,以注重安全、轻量、可配置、可扩展且灵活的方式,为 http/1、http/2、http/3、websockets、webtransport、MQTT 及其他协议提供客户端和服务器。 它通过 cmake 即可轻松构建和交叉构建,适用于从嵌入式 RTOS 到大规模云端服务的各类场景。

它支持大量轻量级辅助实现,涵盖 JSON、CBOR、JOSE、COSE 等,并开箱即支持 OpenSSL 和 MbedTLS v2/3/4,以覆盖所有场景。 在事件循环共享方面,它兼容性极强,支持 libuv、libevent、libev、sdevent、glib 和 uloop,也支持自定义事件库。

100+ 个独立最小示例 覆盖各种场景,采用 CC0 许可(公有领域),方便复制粘贴,让你快速上手。

有大量 README 介绍多种主题。 Doxygen API 文档

每次推送都会执行大量 CI 测试

概览

V5.0 现已可用……请升级到该版本,更推荐升级到 v5.0-stable 或 main,因为许多安全修复仅在 v5.0-stable 和 main 中提供;5.0 之前的版本实际上已弃用。

目前持续进行增量安全审计,随时发现并修复新问题;这并不意味着代码薄弱,而是说明我正在使用前沿模型让它变得极其强健。

** v5.0 新增特性 **

  • 新增对 SChannel(Windows 原生 TLS,无需构建 OpenSSL!)、GnuTLS、openHiTLS 和 BearSSL 的支持
  • 使用 aws-lc、wolfssl、boringssl、libressl、gnutls 和 schannel 的 QUIC + H3 + Webtransport 实现(OpenSSL 仅支持 h1/h2;mbedtls 可通过补丁实现)
  • WebRTC 混流(类似自建 Zoom)
  • HLS 分发
LWS 版本 平台 协议 默认 TLS
<= 4.5 非 FreeRTOS 任意 OpenSSL
<= 4.5 FreeRTOS 任意 mbedTLS
5.0+ Windows 任意 schannel
5.0+ *nix h1, h2 OpenSSL
5.0+ *nix quic/h3 GnuTLS
5.0+ FreeRTOS 任意 mbedTLS

quic/h3 默认在构建中启用……这要求使用 GnuTLS 而非 OpenSSL,以使 quic/h3 可用。

TLS 库 服务器 TLS 客户端 TLS QUIC 传输(TLS 1.3) WSS / HTTPS 基于 TLS 的 MQTT ALPN(HTTP/2) DTLS(WebRTC) 会话缓存 JIT Trust GenCrypto
GnuTLS 是 是 是 是 是 是 是 是 否 是
OpenSSL 是 是 否* 是 是 是 是 是 是 是
LibreSSL 是 是 是 是 是 是 是 是 否 是
AWS-LC 是 是 是 是 是 是 是 是 否 是
BoringSSL 是 是 是 是 是 是 是 是 否 是
wolfSSL 是 是 是 是 是 是 是 是 否 是
mbedTLS 是 是 需要补丁 是 是 是 是 是 是 是
SChannel 是 是 是 是 是 是 是 是 否 是
BearSSL 是 是 否 是 是 是 否 是 是 是
openHiTLS 是 是 否 是 是 是 是(不支持 SRTP) 是 是 是

* 注:1) 上游 OpenSSL 未提供 LWS 的 QUIC 传输作为加密引擎所需的关键 QUIC TLS API(SSL_set_quic_method)。如果需要 QUIC/HTTP3 支持,我们建议使用 BoringSSL 或 GnuTLS。 * *注:2) openHiTLS 未提供所需的 QUIC TLS API *

  • 内置 DHT 支持:-DLWS_WITH_DHT=1