Libwebsockets adalah pustaka C murni yang mudah digunakan, berlisensi MIT, menyediakan klien dan server untuk http/1 , http/2 , websockets , MQTT dan protokol lainnya dengan cara yang mengutamakan keamanan, ringan, dapat dikonfigurasi, dapat diskalakan, dan fleksibel. Sangat mudah untuk membangun dan melakukan cross-build melalui cmake dan cocok untuk tugas-tugas dari RTOS tertanam melalui layanan cloud massal.
Ini mendukung banyak implementasi tambahan ringan untuk hal-hal seperti JSON, CBOR, JOSE, COSE, dan mendukung OpenSSL dan MbedTLS v2 dan v3 di luar kotak untuk semuanya. Ini sangat ramah dalam hal berbagi loop acara, mendukung libuv, libevent, libev, sdevent, glib dan uloop, serta lib acara khusus.
100+ contoh minimal independen untuk berbagai skenario, berlisensi CC0 (domain publik) untuk potong dan tempel, memungkinkan Anda memulai dengan cepat.
Ada banyak README tentang berbagai topik.
Kami melakukan pengujian CI dalam jumlah besar per push, saat ini 582 dibangun pada 30 platform. Anda dapat melihat rak lws CI dan membaca tentang bagaimana Sai berbasis lws digunakan untuk mengoordinasikan semua pengujian.
Ingin mengarahkan tampilan EPD atau TFT / OLED menggunakan HTML + CSS? Hanya mendapat ESP32?
Ingin JPEG jarak jauh, PNG, HTML, komposisi RGBA, gamma, difusi kesalahan jika diperlukan?
Render waktu nyata ke dalam buffer baris karena Anda tidak memiliki cukup heap untuk framebuffer?
Coba lihat di sini...
Terima kasih kepada Felipe Gasper, sekarang ada pengikatan perl untuk lws yang tersedia di metacpan, ini menggunakan dukungan loop peristiwa generik terbaru di lws untuk menjadikan lws sebagai tamu pada loop peristiwa Perl yang ada.
Dukungan Secure Streams di lws diperkenalkan beberapa tahun yang lalu, ini adalah antarmuka tingkat yang lebih tinggi ke api tingkat lws wsi
yang menyederhanakan konektivitas dengan memisahkan kebijakan koneksi seperti protokol dan informasi titik akhir ke dalam file kebijakan JSON terpisah, dan hanya memiliki kesepakatan kode dengan muatan; sebanyak mungkin detail protokol kabel disembunyikan atau dipindahkan ke kebijakan, sehingga kode pengguna hampir sama meskipun protokol kabel berubah.
Kode pengguna hanya meminta untuk membuat SS dengan "nama tipe aliran", itu dibuat sesuai dengan detailnya (protokol, titik akhir, dll) dengan nama yang sama dalam kebijakan.
Entri kebijakan utama seperti titik akhir dapat berisi substitusi string ${metadata-name}
untuk menangani adaptasi runtime melalui metadata. h1, h2, ws dan mqtt didukung.
Sebagai lapisan di atas api wsi
, SS menyediakan cara tingkat yang lebih tinggi untuk mengakses kemampuan tingkat wsi yang ada, kedua jenis API tersebut akan tetap didukung. Secure Streams mempunyai umur yang lebih panjang dibandingkan satu wsi, sehingga SS dapat mengkoordinasikan percobaan ulang dengan sendirinya. Kode pengguna berbasis SS biasanya jauh lebih kecil dan lebih mudah dipelihara dibandingkan lapisan wsi.
Di cabang utama saya telah memindahkan contoh lama ke ./minimal-examples-lowlevel
dan saya mulai memindahkan lebih banyak kasus dari sana ke contoh berbasis SS.
Fitur | cara wsi "tingkat rendah". | Cara Streaming Aman |
---|---|---|
Ciptakan konteks | kode | sama |
Dukungan loop, penjadwal sul | default, lib acara | sama |
Mendukung mode komunikasi | Klien, Server, Mentah | sama |
Mendukung protokol | h1, h2, ws, mqtt (klien) | sama |
dukungan TLS | mbedtls (termasuk v3), openssl (termasuk v3), wolfssl, membosankanssl, libressl | sama |
Dapat diserialkan, dapat diproksikan, dapat diubah, dapat diangkut | TIDAK | Ya |
Objek pengguna per koneksi yang dialokasikan secara otomatis | pss ditentukan dalam lws_protocols | Ditentukan dalam ss info struct |
API Pengguna Koneksi | lws_protocols cbs khusus protokol (> 100) | SS API (rx, tx, callback status saja) |
Mengirim adaptasi | lws_callback_on_writeable() + DAPAT DITULIS | lws_ss_request_write() + tx() cb |
Mengirim buffer | Penanganan parsial yang dipilih pengguna + malloc | Disediakan SS, tidak ada sebagian |
Buat vhost | kode | kebijakan JSON |
validasi TLS | bundel atau kode sertifikat | Kebijakan JSON , atau bundel sertifikat |
Coba lagi/mundur koneksi | kode | Kebijakan JSON , Otomatis |
Memaku | kode | Kebijakan JSON , Otomatis |
Detail titik akhir dan protokol | menyebar ke seluruh kode | kebijakan JSON |
Pemilihan protokol, berbagi saluran/aliran | kode | kebijakan JSON |
adalah pemilihan subprotokol | kode | kebijakan JSON |
ws biner / teks | kode | kebijakan JSON |
Metadata khusus protokol | Api khusus protokol dalam kode (misalnya, lws_hdr) | Kebijakan JSON , api metadata umum dalam kode |
Aturan validitas koneksi | struktur | Kebijakan JSON , Otomatis |
Streaming sebagai Jajak Pendapat Panjang | kode | kebijakan JSON |
Penulis | kode | Kebijakan JSON + rotasi otomatis jika penyedia mendukung, kode lain |
API Secure Streams juga dapat diserialkan , kode klien yang sama persis dapat memenuhi koneksi secara langsung dalam proses yang sama seperti yang Anda harapkan, atau meneruskan tindakan, metadata, dan muatan ke Proxy SS yang memiliki kebijakan melalui Domain Unix atau koneksi soket TCP untuk dipenuhi secara terpusat. Hal ini memungkinkan, misalnya, aliran h2 dari berbagai proses berbagi satu koneksi.
SS serial juga dapat melakukan perjalanan melalui transport generik seperti UART, contoh diberikan dengan menerapkan contoh Binance pada RPi Pico dengan transport UART ke proxy SS transport UART, di mana pico itu sendiri tidak memiliki tumpukan jaringan, tls, kompresi, atau tumpukan wss , namun dapat mengirim dan menerima ke dan dari titik akhir seolah-olah memang demikian.
lws_trasport_mux
opsional digunakan untuk menempatkan antara transport UART dan lapisan SSPC, memungkinkan satu pipa membawa banyak koneksi SS terpisah.
Kode SS pengguna identik namun dikirimkan, diubah, dan dipenuhi.
Lihat log perubahan
Komitmen awal untuk lws akan dilakukan 11 tahun yang lalu pada tanggal 28 Oktober 2021, ini merupakan pekerjaan yang banyak. Ada total 4,3 ribu patch, secara kumulatif mencapai 800KLOC (ini bukan ukuran di repo, namun selama bertahun-tahun, berapa banyak baris sumber yang diubah oleh patch).
Yang menggembirakan, ternyata selama bertahun-tahun, ~15% di antaranya disumbangkan oleh 404 kontributor: itu lumayan. Terima kasih banyak kepada semua orang yang telah menyediakan patch.
Saat ini setidaknya puluhan juta perangkat dan fitur produk mengandalkan lws untuk menangani komunikasi mereka termasuk beberapa dari FAANG; Google sekarang memasukkan lws sebagai bagian dari sumber Android.
Ini adalah perpustakaan libwebsockets C untuk klien dan server websocket ringan. Untuk dukungan, kunjungi
https://libwebsockets.org
dan pertimbangkan untuk bergabung dengan milis proyek di
https://libwebsockets.org/mailman/listinfo/libwebsockets
Anda bisa mendapatkan perpustakaan versi terbaru dari git:
Dokumen Doxygen API untuk pengembangan: https://libwebsockets.org/lws-api-doc-main/html/index.html