Libwebsockets เป็นไลบรารี C บริสุทธิ์ที่มีสิทธิ์การใช้งาน MIT ซึ่งให้บริการไคลเอนต์และเซิร์ฟเวอร์สำหรับ http/1 , http/2 , websockets , MQTT และโปรโตคอลอื่น ๆ ในรูปแบบที่คำนึงถึงความปลอดภัย น้ำหนักเบา กำหนดค่าได้ ปรับขนาดได้ และยืดหยุ่น ง่ายต่อการสร้างและสร้างข้ามผ่าน cmake และเหมาะสำหรับงานจาก RTOS ที่ฝังตัวไปจนถึงการให้บริการบนคลาวด์จำนวนมาก
รองรับการใช้งานเสริมแบบน้ำหนักเบาจำนวนมากสำหรับสิ่งต่าง ๆ เช่น JSON, CBOR, JOSE, COSE และรองรับ OpenSSL และ MbedTLS v2 และ v3 ทันทีสำหรับทุกสิ่ง เป็นระบบที่รวมกลุ่มกันมากเมื่อพูดถึงการแชร์ลูปเหตุการณ์ รองรับ libuv, libevent, libev, sdevent, glib และ uloop รวมถึง libs เหตุการณ์แบบกำหนดเอง
ตัวอย่างขั้นต่ำอิสระกว่า 100 รายการสำหรับสถานการณ์ต่างๆ ที่มีลิขสิทธิ์ CC0 (โดเมนสาธารณะ) สำหรับการตัดและวาง ช่วยให้คุณเริ่มต้นได้อย่างรวดเร็ว
มี README มากมายในหัวข้อต่างๆ
เราทำการทดสอบ CI จำนวนมากต่อการพุช โดยปัจจุบันมี 582 บิวด์บน 30 แพลตฟอร์ม คุณสามารถดูชั้นวาง lws CI และอ่านเกี่ยวกับวิธีการใช้ Sai ที่ใช้ lws เพื่อประสานงานการทดสอบทั้งหมด
ต้องการขับเคลื่อนจอแสดงผล EPD หรือ TFT / OLED โดยใช้ HTML + CSS หรือไม่? มีแค่ ESP32 เหรอ?
ต้องการ JPEG, PNG, HTML, RGBA, แกมม่า, การแพร่กระจายข้อผิดพลาดหากจำเป็นหรือไม่
เรนเดอร์แบบเรียลไทม์เป็นบัฟเฟอร์บรรทัดเนื่องจากคุณมีฮีปไม่เพียงพอสำหรับเฟรมบัฟเฟอร์ใช่ไหม
ลองดูที่นี่...
ขอบคุณ Felipe Gasper ขณะนี้มีการผูก Perl สำหรับ lws ที่ metacpan ซึ่งใช้การสนับสนุนลูปเหตุการณ์ทั่วไปล่าสุดใน lws เพื่อให้ lws เป็นแขกในลูปเหตุการณ์ Perl ที่มีอยู่
การสนับสนุน Secure Streams ใน lws เปิดตัวเมื่อไม่กี่ปีที่ผ่านมา โดยเป็นอินเทอร์เฟซระดับสูงกว่าสำหรับ lws wsi
-level apis ที่ทำให้การเชื่อมต่อง่ายขึ้นโดยแยกนโยบายการเชื่อมต่อ เช่น ข้อมูลโปรโตคอลและข้อมูลปลายทางออกเป็นไฟล์นโยบาย JSON แยกต่างหาก และเพียงแค่มีการจัดการโค้ด พร้อมเพย์โหลด; รายละเอียดมากที่สุดเท่าที่เป็นไปได้ของ wire protocol จะถูกซ่อนหรือย้ายไปยังนโยบาย ดังนั้นรหัสผู้ใช้จึงเกือบจะเหมือนกันแม้ว่า wire protocol จะเปลี่ยนไปก็ตาม
รหัสผู้ใช้ขอให้สร้าง SS ด้วย "ชื่อ streamtype" ซึ่งสร้างขึ้นตามรายละเอียด (โปรโตคอล จุดสิ้นสุด ฯลฯ) ภายใต้ชื่อเดียวกันในนโยบาย
รายการนโยบายที่สำคัญ เช่น จุดสิ้นสุดสามารถมีการแทนที่สตริง ${metadata-name}
เพื่อจัดการการปรับรันไทม์ผ่านข้อมูลเมตา รองรับ h1, h2, ws และ mqtt
SS มอบวิธีการระดับที่สูงกว่าในการเข้าถึงความสามารถระดับ wsi ที่มีอยู่ในฐานะเลเยอร์ที่อยู่ด้านบนของ wsi
apis โดย API ทั้งสองประเภทจะยังคงได้รับการสนับสนุน Secure Streams มีอายุการใช้งานยาวนานกว่า WSI เดียว ดังนั้น SS จึงสามารถประสานการลองใหม่ได้ด้วยตัวเอง โดยทั่วไปรหัสผู้ใช้ที่ใช้ SS จะมีขนาดเล็กกว่าและสามารถบำรุงรักษาได้ดีกว่าเลเยอร์ wsi
ในสาขาหลัก ฉันได้ย้ายตัวอย่างเก่าๆ ไปไว้ที่ ./minimal-examples-lowlevel
และฉันเริ่มย้ายเคสเพิ่มเติมจากที่นั่นไปเป็นตัวอย่างที่ใช้ SS
คุณสมบัติ | "ระดับต่ำ" ด้วยวิธีเดียวกัน | วิธีสตรีมที่ปลอดภัย |
---|---|---|
สร้างบริบท | รหัส | เดียวกัน |
การสนับสนุนแบบวนซ้ำ, ตัวกำหนดเวลา sul | ค่าเริ่มต้น libs เหตุการณ์ | เดียวกัน |
รองรับโหมดการสื่อสาร | ไคลเอนต์ เซิร์ฟเวอร์ ดิบ | เดียวกัน |
รองรับโปรโตคอล | h1, h2, ws, mqtt (ไคลเอนต์) | เดียวกัน |
การสนับสนุน TLS | mbedtls (รวมถึง v3), openssl (รวมถึง v3), wolfssl, Boringssl, libressl | เดียวกัน |
ต่อเนื่องได้, พร็อกซีได้, ผสมได้, ขนส่งได้ | เลขที่ | ใช่ |
วัตถุผู้ใช้ที่จัดสรรต่อการเชื่อมต่อโดยอัตโนมัติ | pss ระบุไว้ใน lws_protocols | ระบุไว้ใน ss info struct |
API ผู้ใช้การเชื่อมต่อ | lws_protocols cbs เฉพาะโปรโตคอล (> 100) | SS API (rx, tx, การเรียกกลับสถานะเท่านั้น) |
กำลังส่งการปรับตัว | lws_callback_on_writeable() + เขียนได้ | lws_ss_request_write() + tx() cb |
กำลังส่งบัฟเฟอร์ | ผู้ใช้เลือก + การจัดการบางส่วน malloc | ให้โดย SS ไม่มีบางส่วน |
สร้างวีโฮส | รหัส | นโยบายเจสัน |
การตรวจสอบ TLS | ชุดใบรับรองหรือรหัส | นโยบาย JSON หรือชุดใบรับรอง |
ลองเชื่อมต่อใหม่ / ถอยกลับ | รหัส | นโยบาย JSON อัตโนมัติ |
เก่งขึ้น | รหัส | นโยบาย JSON อัตโนมัติ |
รายละเอียดปลายทางและโปรโตคอล | กระจายไปทั่วโค้ด | นโยบายเจสัน |
การเลือกโปรโตคอล การแชร์ไปป์ไลน์ / สตรีม | รหัส | นโยบายเจสัน |
การเลือกโปรโตคอลย่อย | รหัส | นโยบายเจสัน |
เป็นไบนารี / ข้อความ | รหัส | นโยบายเจสัน |
ข้อมูลเมตาเฉพาะโปรโตคอล | API เฉพาะโปรโตคอลในโค้ด (เช่น lws_hdr) | นโยบาย JSON , API ข้อมูลเมตาทั่วไปในโค้ด |
กฎความถูกต้องของการเชื่อมต่อ | โครงสร้าง | นโยบาย JSON อัตโนมัติ |
สตรีมแบบสำรวจความคิดเห็นแบบยาว | รหัส | นโยบายเจสัน |
การรับรองความถูกต้อง | รหัส | นโยบาย JSON + การหมุนเวียนอัตโนมัติหากผู้ให้บริการรองรับ รหัสอื่น |
Secure Streams API ยังสามารถ ซีเรียลไลซ์ได้ รหัสไคลเอ็นต์เดียวกันทุกประการสามารถตอบสนองการเชื่อมต่อโดยตรงในกระบวนการเดียวกับที่คุณคาดหวัง หรือส่งต่อการดำเนินการ ข้อมูลเมตา และเพย์โหลดไปยัง SS Proxy ที่เป็นเจ้าของนโยบายผ่านโดเมน Unix หรือการเชื่อมต่อซ็อกเก็ต TCP ที่จะบรรลุผลจากส่วนกลาง ซึ่งช่วยให้สตรีม h2 จากกระบวนการต่างๆ ร่วมกันโดยใช้การเชื่อมต่อเดียว
SS ที่ต่อเนื่องกันยังสามารถเดินทางผ่านการขนส่งทั่วไปเช่น UART ได้ ตัวอย่างมีให้ในการใช้งานตัวอย่าง Binance บน RPi Pico ด้วยการขนส่ง UART ไปยังพร็อกซี SS การขนส่ง UART โดยที่ pico เองไม่มีเครือข่ายสแต็ก, tls, การบีบอัดหรือสแต็ก wss แต่สามารถส่งและรับเข้าและออกจากตำแหน่งข้อมูลได้เสมือนว่าทำได้
ตัวเลือก lws_trasport_mux
ใช้เพื่อแทรกระหว่างการขนส่ง UART และเลเยอร์ SSPC ทำให้ไปป์เดียวสามารถเชื่อมต่อ SS แยกกันจำนวนมากได้
รหัส SS ของผู้ใช้เหมือนกันแต่มีการขนส่ง ผสม และปฏิบัติตาม
ดูบันทึกการเปลี่ยนแปลง
ความมุ่งมั่นเริ่มแรกสำหรับ lws จะเป็นเวลา 11 ปีที่แล้วจนถึงวันที่ 28 ต.ค. 2021 มันเป็นงานที่หนักมาก มีแพตช์ทั้งหมด 4.3,000 แพตช์ ซึ่งแตะ 800KLOC สะสม (นี่ไม่ใช่ขนาดใน repo แต่ในช่วงหลายปีที่ผ่านมา มีกี่บรรทัดของแหล่งที่มาที่เปลี่ยนแปลงโดยแพตช์)
น่ายินดีที่ปรากฎว่าตลอดหลายปีที่ผ่านมา ~15% ของจำนวนนั้นมาจากผู้มีส่วนร่วม 404 ราย ซึ่งก็ไม่ได้แย่ขนาดนั้น ขอบคุณมากสำหรับทุกคนที่ให้แพทช์
ปัจจุบันอุปกรณ์และฟีเจอร์ผลิตภัณฑ์อย่างน้อยหลายสิบล้านรายการอาศัย lws ในการจัดการการสื่อสาร รวมถึงหลายรายการจาก FAANG; ขณะนี้ Google ได้รวม lws เป็นส่วนหนึ่งของแหล่งข้อมูล Android แล้ว
นี่คือไลบรารี libwebsockets C สำหรับไคลเอ็นต์และเซิร์ฟเวอร์ websocket แบบไลท์เวท สำหรับการสนับสนุนโปรดไปที่
https://libwebsockets.org
และพิจารณาเข้าร่วมรายชื่อผู้รับจดหมายโครงการได้ที่
https://libwebsockets.org/mailman/listinfo/libwebsockets
คุณสามารถรับไลบรารีเวอร์ชันล่าสุดได้จาก git:
เอกสาร Doxygen API สำหรับการพัฒนา: https://libwebsockets.org/lws-api-doc-main/html/index.html