Libwebsockets عبارة عن مكتبة C نقية سهلة الاستخدام ومرخصة من معهد ماساتشوستس للتكنولوجيا توفر العميل والخادم لـ http/1 و http/2 و websockets و MQTT والبروتوكولات الأخرى بطريقة تتسم بالأمان وخفيفة الوزن وقابلة للتكوين وقابلة للتطوير ومرنة. من السهل الإنشاء والإنشاء المتبادل عبر cmake وهو مناسب للمهام بدءًا من RTOS المضمن وحتى الخدمة السحابية الجماعية.
وهو يدعم الكثير من التطبيقات الإضافية خفيفة الوزن لأشياء مثل JSON وCBOR وJOSE وCOSE، ويدعم OpenSSL وMbedTLS v2 وv3 خارج الصندوق لكل شيء. إنه مجتمعي للغاية عندما يتعلق الأمر بمشاركة حلقة الأحداث، ويدعم libuv، وlievent، وlibev، وsdevent، وglib، وuloop، بالإضافة إلى libs المخصصة للأحداث.
أكثر من 100 من الأمثلة البسيطة المستقلة لسيناريوهات مختلفة، مرخصة من قبل CC0 (المجال العام) للقص واللصق، تسمح لك بالبدء بسرعة.
هناك الكثير من الكتب التمهيدية حول مجموعة متنوعة من المواضيع.
نحن نجري عددًا كبيرًا من اختبارات CI لكل دفعة، حاليًا 582 اختبارًا مبنية على 30 منصة. يمكنك رؤية حامل lws CI وقراءة كيفية استخدام Sai المستند إلى lws لتنسيق جميع الاختبارات.
هل تريد تشغيل شاشة EPD أو TFT / OLED باستخدام HTML + CSS؟ حصلت فقط على ESP32؟
هل تريد تكوين ملفات JPEG وPNGs وHTML وRGBA وغاما ونشر الأخطاء عن بعد إذا لزم الأمر؟
يتم عرض الوقت الفعلي في مخزن مؤقت للخط لأنه ليس لديك ما يكفي من الكومة لمخزن مؤقت للإطارات؟
الق نظرة هنا...
بفضل Felipe Gasper، يتوفر الآن رابط Perl لـ lws في metacpan، ويستخدم هذا دعم حلقة الأحداث العامة الحديثة في lws لجعل lws ضيفًا في حلقة أحداث Perl الموجودة.
تم تقديم دعم التدفقات الآمنة في lws منذ عامين، وهي واجهة ذات مستوى أعلى لواجهة برمجة التطبيقات على مستوى lws wsi
والتي تعمل على تبسيط الاتصال عن طريق فصل سياسة الاتصال مثل البروتوكول ومعلومات نقطة النهاية في ملف سياسة JSON منفصل، والحصول على صفقة التعليمات البرمجية فقط مع الحمولات. يتم إخفاء أكبر عدد ممكن من تفاصيل بروتوكول السلك أو نقلها إلى السياسة، لذلك يكون رمز المستخدم متطابقًا تقريبًا حتى لو تغير بروتوكول السلك.
يطلب رمز المستخدم فقط إنشاء SS من خلال "اسم نوع الدفق"، ويتم إنشاؤه وفقًا للتفاصيل (البروتوكول، نقطة النهاية، إلخ) تحت نفس الاسم في السياسة.
يمكن أن تحتوي إدخالات السياسة الرئيسية مثل نقطة النهاية على بدائل سلسلة ${metadata-name}
للتعامل مع تعديلات وقت التشغيل عبر البيانات التعريفية. ويدعم h1، h2، ws وmqtt.
كطبقة أعلى واجهة برمجة تطبيقات wsi
، توفر SS طريقة ذات مستوى أعلى للوصول إلى إمكانيات مستوى wsi الحالية، وسيظل كلا النوعين من واجهة برمجة التطبيقات مدعومين. تعتبر التدفقات الآمنة أطول عمرًا من شبكة wsi واحدة، لذا يمكن لـ SS تنسيق عمليات إعادة المحاولة بنفسها. عادةً ما يكون رمز المستخدم المستند إلى SS أصغر بكثير وأكثر قابلية للصيانة من طبقة wsi.
في الفرع الرئيسي، قمت بنقل الأمثلة القديمة إلى ./minimal-examples-lowlevel
وبدأت في نقل المزيد من الحالات من هناك إلى أمثلة مستندة إلى SS.
ميزة | طريقة wsi "منخفضة المستوى". | طريقة التدفقات الآمنة |
---|---|---|
إنشاء السياق | شفرة | نفس |
دعم حلقة، جدولة سول | الافتراضي، الحدث libs | نفس |
يدعم وضع الاتصالات | العميل، الخادم، الخام | نفس |
يدعم البروتوكولات | h1، h2، ws، mqtt (العميل) | نفس |
دعم TLS | mbedtls (بما في ذلك v3)، opensl (بما في ذلك v3)، wolfssl، Boringssl، libressl | نفس |
قابلة للتسلسل، قابلة للوكيل، قابلة للخلط، قابلة للنقل | لا | نعم |
كائن المستخدم المخصص تلقائيًا لكل اتصال | PSS المحدد في lws_protocols | المحدد في بنية معلومات SS |
واجهة برمجة تطبيقات مستخدم الاتصال | lws_protocols cbs الخاص بالبروتوكول (> 100) | SS API (rx، tx، عمليات رد الاتصال الخاصة بالحالة فقط) |
إرسال التكيف | lws_callback_on_writeable() + WRITEABLE | lws_ss_request_write() + tx() cb |
إرسال المخزن المؤقت | اختيار المستخدم + التعامل الجزئي مع malloc'd | تم توفير SS، بدون أجزاء |
إنشاء مضيفين افتراضيين | شفرة | سياسة جيسون |
التحقق من صحة TLS | حزمة سيرت أو رمز | سياسة JSON أو حزمة الشهادات |
إعادة محاولة الاتصال/التراجع | شفرة | سياسة JSON ، تلقائية |
تسمير | شفرة | سياسة JSON ، تلقائية |
تفاصيل نقطة النهاية والبروتوكول | تنتشر حول التعليمات البرمجية | سياسة جيسون |
اختيار البروتوكول، وتقاسم خطوط الأنابيب/الدفق | شفرة | سياسة جيسون |
اختيار البروتوكول الفرعي | شفرة | سياسة جيسون |
ws ثنائي/نص | شفرة | سياسة جيسون |
البيانات التعريفية الخاصة بالبروتوكول | واجهات برمجة التطبيقات الخاصة بالبروتوكول في الكود (على سبيل المثال، lws_hdr) | سياسة JSON ، واجهة برمجة التطبيقات للبيانات الوصفية العامة في الكود |
قواعد صلاحية الاتصال | البنية | سياسة JSON ، تلقائية |
تيار كاستطلاع طويل | شفرة | سياسة جيسون |
مصادقة | شفرة | سياسة JSON + التدوير التلقائي إذا كان الموفر مدعومًا، رمز آخر |
كما أن واجهات برمجة تطبيقات التدفقات الآمنة قابلة للتسلسل ، حيث يمكن لرمز العميل نفسه أن يفي بالاتصال مباشرة في نفس العملية كما تتوقع، أو إعادة توجيه الإجراءات وبيانات التعريف والحمولات إلى وكيل SS الذي يمتلك السياسة عبر مجال 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 ألف تصحيح، يصل إلى 800KLOC بشكل تراكمي (هذا ليس الحجم الموجود في الريبو، ولكن على مر السنين، عدد خطوط المصدر التي تم تغييرها بواسطة التصحيحات).
ومن دواعي السرور، أنه على مر السنين، تبين أن ما يقرب من 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