🟩 شرح Node.js

الاتصال اللحظي (WebSockets)

لماذا WebSockets؟

HTTP العادي: العميل يطلب، الخادم يرد، ثم ينقطع الاتصال. لكن تطبيقات الدردشة والإشعارات تحتاج اتصالًا دائمًا ثنائي الاتجاه — هنا تأتي WebSockets.

HTTPWebSocket
الاتجاهطلب/ردثنائي مستمر
الاتصالينقطع بعد الرديبقى مفتوحًا
الأنسب لـصفحات، APIsدردشة، بثّ حيّ

Socket.IO

أشهر مكتبة للاتصال اللحظي في Node — تبسّط WebSockets وتضيف ميزات (غرف، إعادة اتصال تلقائية):

npm install socket.io

الخادم

import { Server } from "socket.io";
import http from "http";

const server = http.createServer();
const io = new Server(server);

io.on("connection", (socket) => {
  console.log("مستخدم اتّصل:", socket.id);

  // استقبال رسالة
  socket.on("message", (msg) => {
    // بثّها لكل المتّصلين
    io.emit("message", msg);
  });

  socket.on("disconnect", () => {
    console.log("مستخدم غادر");
  });
});

server.listen(3000);

العميل (في المتصفّح)

const socket = io("http://localhost:3000");

socket.emit("message", "مرحبًا للجميع");

socket.on("message", (msg) => {
  console.log("رسالة جديدة:", msg);
});

الغرف (Rooms)

لتجميع المتّصلين (مثل قنوات دردشة منفصلة):

socket.join("room1");
io.to("room1").emit("message", "رسالة لأعضاء الغرفة فقط");

لمحة عن GraphQL

بديل لـ REST: العميل يطلب بالضبط ما يحتاجه من بيانات في استعلام واحد، بدل عدّة طلبات REST. مكتبات شائعة: Apollo Server. مفيد للتطبيقات المعقّدة ذات العلاقات المتشعّبة.

أين تُستخدم WebSockets؟

  • الدردشة والرسائل الفورية.
  • الإشعارات الحيّة.
  • لوحات التحكّم المباشرة (أسعار، إحصاءات).
  • الألعاب والتعاون اللحظي.

أخطاء شائعة

  • استخدام WebSockets لكل شيء — REST أبسط وأنسب لأغلب الطلبات العادية.
  • نسيان معالجة disconnect فتتراكم الاتصالات الميتة.

🎯 التالي: اختبار وتنقيح تطبيقات Node.