Libwebsockets は、使いやすい MIT ライセンスの純粋な C ライブラリで、 http/1 、 http/2 、 websockets 、 MQTTおよびその他のプロトコルのクライアントとサーバーを、セキュリティを重視し、軽量で、構成可能、スケーラブルかつ柔軟な方法で提供します。 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サポートは数年前に導入されました。これは lws wsi
レベルの API への上位レベルのインターフェイスであり、プロトコルやエンドポイント情報などの接続ポリシーを別の JSON ポリシー ファイルに分離し、コード処理だけで接続を簡素化します。ペイロード付き。ワイヤ プロトコルの可能な限り多くの詳細が非表示になるかポリシーに移動されるため、ワイヤ プロトコルが変更された場合でもユーザー コードはほぼ同一になります。
ユーザーコードは「ストリームタイプ名」で SS を作成するように要求するだけで、詳細 (プロトコル、エンドポイントなど) に従ってポリシー内の同じ名前で SS が作成されます。
エンドポイントなどの主要なポリシー エントリには、メタデータを介して実行時の適応を処理するための${metadata-name}
文字列置換を含めることができます。 h1、h2、ws、および mqtt がサポートされています。
SS は、 wsi
API 上のレイヤーとして、既存の 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情報構造体で指定 |
接続ユーザーAPI | プロトコル固有の lws_protocols cbs (> 100) | SS API (rx、tx、state コールバックのみ) |
適応の送信 | 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 に Binance の例を実装し、UART トランスポート SS プロキシに実装しています。ピコ自体にはネットワーク スタック、TLS、圧縮、または WSS スタックがありません。ですが、エンドポイントと同様に送受信できます。
オプションのlws_trasport_mux
は、UART トランスポートと SSPC 層の間に挿入するために使用され、単一のパイプで多くの個別の SS 接続を伝送できるようにします。
ユーザー SS コードは同一ですが、転送、多重化、実行されます。
変更履歴を参照してください
lws の最初のコミットは 11 年前の 2021 年 10 月 28 日になります。大変な作業でした。合計 4.3K のパッチがあり、累積すると 800KLOC に達します (これはリポジトリ内のサイズではなく、長年にわたってパッチによって変更されたソース行の数です)。
嬉しいことに、長年にわたって、そのうちの約 15% が 404 人の寄稿者によって寄稿されたことが判明しました。これはそれほど悪くありません。パッチを提供してくださった皆様に心より感謝いたします。
現在、少なくとも数千万のデバイスと製品機能が、FAANG からのものも含め、通信を処理するために lws に依存しています。 Google は Android ソースの一部として lws を含めるようになりました。
これは、軽量 WebSocket クライアントおよびサーバー用の libwebsockets C ライブラリです。サポートについては、次のサイトにアクセスしてください
https://libwebsockets.org
プロジェクトのメーリング リストへの参加を検討してください。
https://libwebsockets.org/mailman/listinfo/libwebsockets
ライブラリの最新バージョンは git から入手できます。
開発用の Doxygen API ドキュメント: https://libwebsockets.org/lws-api-doc-main/html/index.html