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>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 جديدة". ثم حدد عنوان URL لـ WebSocket، والذي عادة ما يبدأ بـ
ws://أوwss://، في إعداد نقطة النهاية.

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

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

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

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

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

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

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



![[دليل] تحويل واجهات برمجة التطبيقات SOAP إلى واجهات برمجة التطبيقات REST](https://assets.apidog.com/blog/2024/02/convert-soap-to-rest-cover.png)