WebSocket و Webhook
في بداياتي (وغالبًا في بدايات أي مبرمج Backend)، كنت أسمع مصطلحات مثل: WebSocket، Webhook، Real-time، Events… وكلها كانت تختلط علي تحت فكرة وحدة: “شي يرسل بيانات”.
لكن أول ما دخلت مشروع حقيقي، اكتشفت إن الخلط بينها يكلّف وقت، تعقيد، وأحيانًا سيرفر كامل.
هذا المقال يشرح الفرق بينهم كما هو في الواقع، بدون تنظير ولا كلام أكاديمي.
WebSocket
WebSocket يعني اتصال يبقى مفتوح بين المستخدم والسيرفر. ما فيه Request ثم Response وينتهي.
الاتصال يفتح مرة وحدة، ويظل شغّال، والطرفين يقدرون يرسلون بيانات في أي لحظة.
متى يكون WebSocket منطقي؟
- الدردشة (Chat)
- الإشعارات اللحظية
- لوحات تحكم Live
- الألعاب
أي حالة يكون فيها المستخدم لازم يشوف التغيير فورًا.
الجانب المظلم
- استهلاك موارد أعلى
- إدارة اتصالات
- تعقيد في التوسّع
WebSocket قوي، لكنه ثقيل، ولا ينفع تستخدمه في كل مكان.
Webhook
Webhook فكرة أبسط بكثير.
“صار حدث؟ طيب، أرسل إشعار.”
لا اتصال دائم، لا بث مباشر، مجرد طلب HTTP وينتهي.
webhook-client
هنا يكون نظامك مستقبِل.
جهة خارجية تجيك وتقول: “صار شيء”
أمثلة واقعية
- Stripe: تم الدفع
- GitHub: صار push
- خدمة خارجية: تم التحديث
دورك هنا:
- استقبال الطلب
- التحقق من التوقيع
- تأكيد أن الطلب مو مزور
- معالجة البيانات (غالبًا عبر Queue)
أنت ما تطلب الحدث، الحدث هو اللي يجيك.
webhook-server
هنا الوضع معكوس.
عندك نظام، صار فيه حدث، وتبغى تقول لأنظمة ثانية: “ترى صار كذا”
متى تحتاجه؟
- عندك SaaS
- عملاءك يبغون يتكاملون معك
- تبغى ترسل إشعارات عن تغييرات داخل النظام
دورك هنا:
- تجهيز الطلب
- توقيعه
- إرساله
- إعادة المحاولة إذا فشل
الفرق الحقيقي
WebSocket
- اتصال مفتوح
- تواصل ثنائي الاتجاه
- مناسب للتفاعل المباشر
- استهلاك أعلى للموارد
Webhook
- رسالة قصيرة
- تنرسل عند حدث
- أحادي الاتجاه
- خفيف وبسيط
تشبيه يوضح الصورة
- WebSocket مكالمة هاتفية، الخط مفتوح والطرفين يتكلمون متى ما بغوا.
- Webhook رسالة، تنرسل وقت الحاجة وتنتهي.
غلطة شائعة
كثير يقول: “أبغى Real-time، خليني أستخدم Webhook”
Webhook مو تفاعل لحظي، هو إشعار فقط.
إذا المستخدم لازم يشوف الشي ويتفاعل معه فورًا → WebSocket إذا النظام بس يبغى يعرف إن حدث صار → Webhook
في المشاريع الحقيقية
غالبًا تستخدم الثلاثة معًا:
- Webhook-client لاستقبال أحداث خارجية
- Webhook-server لإرسال أحداث لعملائك
- WebSocket لعرض النتائج مباشرة للمستخدم
كل واحد له مكانه، ولا واحد بديل عن الثاني.