Apidog

منصة تطوير API تعاونية متكاملة

تصميم API

توثيق API

تصحيح أخطاء API

محاكاة API

اختبار API الآلي

كيفية تنفيذ WebSocket في C (دليل للمبتدئين)

استكشاف أساسيات تنفيذ WebSocket في لغة C وتقديم أمثلة عملية لمساعدتك في كيفية إرسال WebSocket مع Apidog بسهولة.

Amir Hassan

Amir Hassan

Updated on نوفمبر 29, 2024

WebSocket هو بروتوكول قوي للتواصل يستخدم لتبادل البيانات في الوقت الفعلي، بشكل ثنائي الاتجاه بين العميل والخادم. إن قدرته على إنشاء والحفاظ على اتصال طويل الأمد تجعله مثاليًا للتطبيقات التي تحتاج إلى تحديثات فورية للبيانات. إذا كنت مهتمًا بتنفيذ WebSocket بلغة C، ستوفر لك هذه المقالة دليلًا موجزًا للبدء.

تثبيت libwebsockets

في الوقت الحالي، Tornado هو مكتبة شائعة لـ تنفيذ WebSocket في بايثون. ومع ذلك، فإن libwebsockets هي مكتبة WebSocket مرنة وسهلة الاستخدام عبر الأنظمة المكتوبة بلغة C.

libwebsockets هي مكتبة WebSocket عبر الأنظمة مكتوبة بلغة C، والتي تتيح إنشاء خوادم وعملاء يتعلقون ببروتوكول WebSocket. إنها مكتبة مرنة وسهلة الاستخدام تسمح بالتطوير السريع لتطبيقات WebSocket عالية الأداء. بفضل تصميمها البسيط والخفيف، فهي مناسبة بشكل خاص لبناء التطبيقات على الأنظمة المدمجة أو تطبيقات الخادم عالية الحمل التي تتعامل مع عدد كبير من الاتصالات.

C

يمكنك تثبيت libwebsockets هكذا:

git clone https://github.com/warmcat/libwebsockets.git
cd libwebsockets
mkdir build
cd build
cmake ..
make && sudo make install
pkg-config --modversion libwebsockets

إضافة libwebsockets.h

#include <libwebsockets.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

كتابة الكود المنطقي

#include <libwebsockets.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

// هيكل لتخزين البيانات لكل جلسة WebSocket
struct per_session_data {
};

// وظيفة استدعاء لرسائل خادم WebSocket
int callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) {
    switch (reason) {
        case LWS_CALLBACK_ESTABLISHED: // التعامل مع حدث اتصال جديد
            // إضافة مؤقت لإرسال طابع زمني كل ثانية
            lws_callback_on_writable(wsi);
            break;
        case LWS_CALLBACK_SERVER_WRITEABLE: // التعامل مع حدث إرسال البيانات
            // إرسال الطابع الزمني
            time_t t = time(NULL);
            char timestamp[20];
            sprintf(timestamp, "%ld", t);
            lws_write(wsi, timestamp, strlen(timestamp), LWS_WRITE_TEXT);
            lws_callback_on_writable(wsi);
            break;
        // تم حذف أحداث أخرى
    }
    return 0;
}

int main(int argc, char **argv) {
    // إنشاء بروتوكول WebSocket
    static struct lws_protocols protocols[] = {
        {
            "demo-protocol", // اسم البروتوكول، يجب أن يتطابق مع البروتوكول في كود الواجهة الأمامية
            callback, // مؤشر وظيفة الاستدعاء
            sizeof(struct per_session_data), // حجم البيانات لكل جلسة (اتصال)
            0, // لا توجد معلمات بروتوكول إضافية
            NULL, NULL, NULL
        },
        { NULL, NULL, 0, 0 } // قائمة البروتوكولات تنتهي بـ NULL
    };

    // إنشاء سياق WebSocket
    struct lws_context_creation_info info = {
        .port = 3001, // رقم منفذ الاستماع
        .protocols = protocols // قائمة البروتوكولات
    };
    struct lws_context *context = lws_create_context(&info);

    // التحقق مما إذا كانت عملية إنشاء سياق WebSocket ناجحة
    if (!context) {
        printf("فشل إنشاء سياق WebSocket.\n");
        return -1;
    }

    // الدخول في حلقة والانتظار للاتصالات WebSocket
    while (1) {
        lws_service(context, 50);
    }

    // تنظيف وإغلاق سياق WebSocket
    lws_context_destroy(context);

    return 0;
}

صفحة الواجهة الأمامية تتصل بـ WebSocket

كتابة الصفحة

تحتاج إلى إنشاء index.html، وملء الكود أدناه:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>مستند</title>
  <script>
    window.onload = () => {
        if ('WebSocket' in window) {
            // إنشاء اتصال WebSocket
            let ws = new WebSocket('ws://127.0.0.1:3001/websocket');
            // دفع رسالة عند نجاح اتصال، ويمكن للخادم بدء دفع البيانات
            ws.onopen = () => {
                console.log('websocket success---');
                ws.send('success');
            }
            ws.onmessage = (message) => {
                let data = message.data;
                console.log('get websocket message---', data);
            }
            ws.onerror = () => {
                console.error('websocket fail');
            }
        } else {
            console.error('لا يدعم websocket');
        };
    };
</script>

</head>
<body>
  
</body>
</html>

تشغيل الصفحة

انقر بزر الماوس الأيمن على index.html وفتح هذا الملف:

عرض النتائج

يمكنك أن ترى أن الخلفية تتلقى الرسالة "open success" من الواجهة الأمامية أولاً وأن البناء الافتتاحي ناجح.

ثم، بعد أن تم إنشاء الاتصال، كانت الخلفية تسجل المعلومات للواجهة الأمامية.

كيفية إرسال WebSocket باستخدام Apidog

الآن بعد أن تناولنا تنفيذ WebSocket بلغة C، دعونا نستكشف كيفية إرسال طلبات WebSocket باستخدام Apidog. بينما تركزت القسم السابق على الأساسيات والتقنيات لبرمجة WebSocket في C، يقدم Apidog وسيلة ملائمة للتفاعل مع واجهات برمجة التطبيقات الخاصة بـ WebSocket من خلال واجهته سهلة الاستخدام.

الخطوة 1. إنشاء طلب WebSocket

  • انقر على زر "+"، واختر "واجهة برمجة تطبيقات WebSocket جديدة". ثم حدد عنوان URL الخاص بـ WebSocket، الذي يبدأ غالبًا بـ ws:// أو wss://، في تكوين نقطة النهاية.
إنشاء طلب WebSocket

الخطوة 2. إرسال رسالة

في الرسالة، يمكنك ملء الرسالة التي ستُسلم إلى الخادم، بعد إرسالها، سيتلقى الخادم الرسالة التي أرسلتها.

إرسال رسالة

ملحوظة: تأكد من أن خادم WebSocket قيد التشغيل ومتصل للاتصال الناجح مع Apidog.

الخطوة 3. حفظ الطلب

عندما تنتهي من الكتابة، يمكنك النقر على حفظ لحفظ الطلب، والذي يمكن إعادة استخدامه بسرعة في المرة القادمة.

حفظ الطلب

الخطوة 4. الاتصال بخادم WebSocket

أولاً، انقر على زر الاتصال لإنشاء اتصال WebSocket.

الاتصال بخدمة

بعد نجاح الاتصال، يظهر Apidog رسالة نجاح. كما أن الخادم يرد أيضًا لأن الاتصال ناجح.

اتصال ناجح

الخطوة 5. إرسال طلب WebSocket

يمكننا بعد ذلك التواصل مع الخادم عبر WebSocket. يمكنك استخدام Apidog لإرسال الرسالة والمعاملات إلى الخادم من خلال النقر على زر الإرسال.

الصورة

يمكنك النقر على زر قطع الاتصال إذا كنت لا ترغب في الاستمرار في الاتصال.

الصورة

ملحوظة:

يمتلك Apidog كل من واجهة ويب وواجهة عميل. إذا كنت تستخدم واجهة الويب وترغب في تصحيح خدمات محلية، تحتاج إلى تثبيت ملحق Google لـ Apidog.

قم بتنزيله هنا: ملحق متصفح Apidog

الخاتمة

في الختام، يتضمن تنفيذ WebSocket بلغة C تثبيت مكتبة "libwebsockets"، و تضمين الملف الرئيسي الضروري، وكتابة الكود المنطقي. بالإضافة إلى ذلك، يمكنك استخدام أدوات مثل Apidog لإرسال طلبات WebSocket واختبار وظيفة WebSocket الخاصة بك.