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

يمكنك تثبيت 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>وثيقة</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 وافتح هذا الملف:

عرض النتائج
يمكنك أن ترى أن الخلفية تتلقى الرسالة "open success" من الواجهة الأمامية أولاً وأن الاتصال المفتوح ناجح.
ثم، بعد أن تم إنشاء الاتصال، كانت الخلفية تخرج المعلومات للواجهة الأمامية.

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

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

ملاحظة: تأكد من أن خادم WebSocket قيد التشغيل وقابل للوصول للتواصل الناجح مع Apidog.
الخطوة 3. حفظ الطلب
عندما تنتهي من الكتابة، يمكنك النقر على حفظ لحفظ الطلب، والذي يمكن استخدامه بسرعة في المرة التالية.

الخطوة 4. الاتصال بخادم WebSocket
أولاً، انقر على زر الاتصال لإنشاء اتصال WebSocket.

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

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

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

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