wsServer - مكتبة خادم WebSocket صغيرة جدًا مكتوبة بلغة C
wsServer عبارة عن مكتبة خادم WebSocket صغيرة وخفيفة الوزن مكتوبة بلغة C والتي تهدف إلى أن تكون سهلة الاستخدام وسريعة وقابلة للاختراق ومتوافقة مع RFC 6455.
الميزات الرئيسية هي:
إرسال/استقبال الرسائل النصية والثنائية
إطارات بينج/بونج
فتح / إغلاق المصافحة
يعتمد على الحدث (onmessage، onopen، onclos)
قابلية النقل: يعمل بشكل جيد على أنظمة التشغيل Windows وLinux (بما في ذلك Android) وmacOS وFreeBSD
راجع تقرير Autobahn والمستندات للحصول على تحليل "متعمق".
يتطلب wsServer فقط مترجمًا متوافقًا مع C99 (مثلGC وClang وTCC وغيرها) ولا يتطلب مكتبات خارجية.
الطريقة المفضلة لبناء wsServer على بيئات Linux:
استنساخ بوابة https://github.com/Theldus/wsServercd wsServer/ make# اختياريًا، يمكن للمستخدم أيضًا تثبيت wsServer في النظام،# إما على المسارات الافتراضية أو عن طريق توفير PREFIX أو DESTDIR env# vars إلى تثبيت Makefile.make # أو إجراء التثبيت DESTDIR=/my/folder/
يمكّن CMake المستخدم من إنشاء wsServer بسهولة في بيئات أخرى غير Linux ويسمح أيضًا باستخدام IDE لإنشاء المشروع تلقائيًا. إذا كان هذا هو حالك:
استنساخ بوابة https://github.com/Theldus/wsServercd wsServer/ بناء mkdir && بناء القرص المضغوط / كميك .. يصنع ./examples/echo/echo # في انتظار الاتصالات الواردة...
يتمتع Windows بدعم أصلي عبر MinGW، ويتم تفصيل خطوات إنشاء سلسلة الأدوات هنا.
يعمل wsServer على تبسيط إدارة مأخذ التوصيل من خلال السماح لك بالتركيز على ثلاثة أنواع مختلفة فقط من الأحداث:
/* عميل جديد. */void onopen(ws_cli_conn_t client);/* تم قطع اتصال العميل. */void on Close(ws_cli_conn_t client);/* أرسل العميل رسالة نصية. */void onmessage(ws_cli_conn_t client, const unsigned char *msg,uint64_t size, int type);
هذا هو الشيء الوحيد الذي يجب أن تقلق بشأنه. ليس عليك التفكير في قيم الإرجاع في المقبس، أو قبول الاتصالات، أو أي شيء آخر. على سبيل المكافأة، يتم التعامل مع كل عميل في سلسلة رسائل منفصلة، لذلك لا داعي للقلق بشأن ذلك أيضًا.
يمكن العثور على المزيد من الأمثلة، بما في ذلك ملفات html الخاصة بها، في الأمثلة/ المجلد، ؛-).
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <ws.h>/** * @brief يتم استدعاء هذه الوظيفة عند فتح اتصال جديد. * @param client اتصال العميل. */ باطلة عند فتح (عميل ws_cli_conn_t) {char *cli;cli = ws_getaddress(client);printf("تم فتح الاتصال، addr: %sn"، cli); }/** * @brief يتم استدعاء هذه الوظيفة عند إغلاق الاتصال. * @param client اتصال العميل. */ باطلة عند الإغلاق (عميل ws_cli_conn_t) {char *cli;cli = ws_getaddress(client);printf("الاتصال مغلق، العنوان: %sn"، cli); }/** * تظهر أحداث الرسالة @brief هنا. * @param client اتصال العميل. * @param محتوى الرسالة. * @param size حجم الرسالة. * @param اكتب نوع الرسالة. */void onmessage(ws_cli_conn_t client,const unsigned char *msg, uint64_t size, int type) {char *cli;cli = ws_getaddress(client);printf("أتلقى رسالة: %s (%zu), من: %sn", msg,size, cli);sleep(2);ws_sendframe_txt(client, " مرحبا");sleep(2);ws_sendframe_txt(client, "world"); }كثافة العمليات الرئيسية (باطلة) {/* * الحلقة الرئيسية، هذه الوظيفة لا تعود أبدًا*. * * *إذا كانت قيمة .thread_loop != 0، فسيتم إنشاء مؤشر ترابط جديد * للتعامل مع الاتصالات الجديدة ويصبح ws_socket() * غير محظور. */ws_socket(&(struct ws_server){/* * ربط المضيف، مثل: * المضيف المحلي -> المضيف المحلي/127.0.0.1 * 0.0.0.0 -> IPv4 العالمي * :: -> IPv4 العالمي + IPv6 (مكدس مزدوج) * /.المضيف = "المضيف المحلي"، .المنفذ = 8080، .thread_loop = 0، .timeout_ms = 1000، .evs.onopen = &onopen، .evs.onClose = &onClose، .evs.onmessage = &onmessage});return (0); }
يمكن بناء المثال أعلاه باستخدام: make examples
.
يوجد داخل extra/toyws
مشروع مصاحب يسمى ToyWS. ToyWS هو عميل WebSocket بسيط جدًا ومصمم خصيصًا للعمل مع wsServer. محدود للغاية، ولا يُنصح باستخدامه مع خوادم أخرى غير wsServer ويُقصد استخدامه فقط مع wsServer.
يعمل هذا المشروع الصغير فقط كمساعدة لـ wsServer ويحرر المستخدم من استخدام مشاريع إضافية لاستخدام wsServer بالكامل.
مزيد من المعلومات على: extra/toyws/README.md
لا يدعم wsServer التشفير حاليًا. ومع ذلك، من الممكن استخدامه مع Stunnel، وهو وكيل يضيف دعم TLS إلى المشاريع الحالية. ما عليك سوى اتباع هذه الخطوات الأربع السهلة للحصول على دعم TLS على wsServer.
wsServer مفتوح دائمًا للمجتمع ومستعد لقبول المساهمات، سواء فيما يتعلق بالمشكلات أو الوثائق أو الاختبار أو الميزات الجديدة أو إصلاحات الأخطاء أو الأخطاء المطبعية... مرحبًا بك معنا. تأكد من قراءة إرشادات أسلوب الترميز قبل إرسال العلاقات العامة.
هل كان المشروع مفيدًا لك؟ هل لديك ما تقوله حول هذا الموضوع؟ اترك تعليقاتك هنا.
wsServer مرخص بموجب ترخيص GPLv3. كتبه ديفيدسون فرانسيس ومساهمين آخرين.