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

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

Amir Hassan

Amir Hassan

21 أغسطس 2025

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

Apidog للمؤسسات

نشر محلي

SSO & RBAC

متوافق مع SOC 2

استكشاف Apidog Enterprise

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

تثبيت libwebsockets

في الوقت الحالي، Tornado هو مكتبة شهيرة لـ تنفيذ WebSocket في Python. ومع ذلك، تعتبر 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", // اسم البروتوكول، يجب أن يطابق بروتوكول WebSocket في كود الواجهة الأمامية
            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>Document</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---');
                ws.send('نجاح');
            }
            ws.onmessage = (message) => {
                let data = message.data;
                console.log('الحصول على رسالة WebSocket---', data);
            }
            ws.onerror = () => {
                console.error('فشل WebSocket');
            }
        } else {
            console.error('لا يدعم WebSocket');
        };
    };
</script>

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

تشغيل الصفحة

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

عرض النتائج

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

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

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

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

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

إنشاء طلب WebSocket

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

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

إرسال رسالة

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

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

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

حفظ الطلب

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

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

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

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

اتصال ناجح

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

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

img

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

img

ملاحظة:

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

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

استنتاج

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

Explore more

كيفية الوصول إلى واجهة برمجة تطبيقات كلود 3.7 سونيت واختبارها باستخدام أبادوغ

كيفية الوصول إلى واجهة برمجة تطبيقات كلود 3.7 سونيت واختبارها باستخدام أبادوغ

إذا كنت متحمسًا لإصدار Anthropic الأخير، Claude 3.7 Sonnet، وترغب في استكشاف قدراته من خلال واجهة برمجة التطبيقات (API) أثناء اختباره باستخدام Apidog، فأنت في المكان الصحيح. 💡قبل أن نبدأ، دعني أعطيك لمحة سريعة: قم بتنزيل Apidog مجانًا اليوم لتسهيل عملية اختبار واجهة برمجة التطبيقات الخاصة بك، خاصة لاستكشاف ميزات Claude 3.7 Sonnet القوية - مثالي للمطورين الذين يرغبون في اختبار نماذج الذكاء الاصطناعي المتطورة مثل هذا!زر لنبدأ بشرح لماذا يعد Claude 3.7 Sonnet مهمًا. كشفت Anthropic مؤخرًا عن هذا

25 فبراير 2025

كيفية بناء واختبار واجهة برمجة تطبيقات Spring Boot باستخدام Apidog

كيفية بناء واختبار واجهة برمجة تطبيقات Spring Boot باستخدام Apidog

تعلم كيفية إنشاء واجهة برمجة تطبيقات RESTful بسيطة باستخدام Spring Boot واختبارها بأداة تسمى APIdog. Spring Boot هو إطار عمل يسهل تطوير الويب باستخدام Java. Apidog هي أداة تساعدك في اختبار وتصحيح واجهات برمجة التطبيقات الخاصة بك.

29 فبراير 2024

[دليل] تحويل واجهات برمجة التطبيقات SOAP إلى واجهات برمجة التطبيقات REST

[دليل] تحويل واجهات برمجة التطبيقات SOAP إلى واجهات برمجة التطبيقات REST

تحويل واجهات برمجة التطبيقات SOAP إلى REST أصبح أكثر وضوحًا. تقدم واجهات REST مرونة وقابلية للتوسع وبساطة في تعزيز الاتصال بين نظامين أو برنامجين. في هذه المقالة، اكتشف ما تحتاجه لتحويل واجهات SOAP إلى REST!

29 فبراير 2024

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات