0Pricing
JavaScript Academy · درس

إرسال الرسائل واستقبالها

تبادلوا البيانات باستخدام send وonmessage.

إرسال الرسائل واستقبالها درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 4 دروس في المجموع.

إرسال النصوص

بعد فتح الاتصال، ينقل socket.send(string) رسالة نصية إلى الخادم.

socket.onopen = () => {
  socket.send("ping");
};

الاستقبال باستخدام onmessage

يُطلَق onmessage لكل إطار وارد. توجد البيانات في event.data.

socket.onmessage = (event) => {
  console.log("Received:", event.data);
};

تغليف JSON

تنقل WebSockets سلاسل نصية خامًا. ولإرسال بيانات منظّمة، حوّلها إلى صيغة تسلسلية باستخدام JSON.stringify، ثم حلّلها عند الاستلام.

socket.send(JSON.stringify({ type: "chat", text: "hi" }));
socket.onmessage = (e) => {
  const msg = JSON.parse(e.data);
  console.log(msg.type, msg.text);
};

توجيه الرسائل حسب النوع

من الأنماط الشائعة تضمين حقل type وتوجيه الرسالة بناءً عليه.

socket.onmessage = (e) => {
  const msg = JSON.parse(e.data);
  switch (msg.type) {
    case "chat": showChat(msg); break;
    case "presence": updatePresence(msg); break;
  }
};

إرسال البيانات الثنائية

يقبل send أيضًا ArrayBuffer والمصفوفات ذات الأنواع وBlob لإرسال حمولات ثنائية.

const bytes = new Uint8Array([1, 2, 3, 4]);
socket.send(bytes.buffer);

استقبال البيانات الثنائية

عند استخدام binaryType = "arraybuffer"، تكون قيمة event.data من نوع ArrayBuffer، ويمكنك تغليفها في مصفوفة ذات نوع.

socket.binaryType = "arraybuffer";
socket.onmessage = (e) => {
  if (e.data instanceof ArrayBuffer) {
    const view = new Uint8Array(e.data);
    console.log(view.length);
  }
};

التحكم في التدفق باستخدام bufferedAmount

تعرض bufferedAmount عدد البايتات الموضوعة في قائمة الانتظار والتي لم تُرسل بعد. تحقّق منها قبل إغراق المقبس بالرسائل لتجنّب نمو الذاكرة بلا حدود.

if (socket.bufferedAmount < 1_000_000) {
  socket.send(payload);
}

نبضات التحقق

أرسل رسائل ping دورية حتى يعرف الطرفان أن الاتصال لا يزال حيًا، وحتى لا تغلق الأجهزة الوسيطة الاتصالات الخاملة.

setInterval(() => {
  if (socket.readyState === WebSocket.OPEN) {
    socket.send(JSON.stringify({ type: "ping" }));
  }
}, 30000);

الطلب/الاستجابة عبر WebSocket

أضف معرّفًا إلى الرسائل الصادرة، وحلّ الوعد المعلّق عند وصول الرد المطابق.

const pending = new Map();
function request(payload) {
  const id = crypto.randomUUID();
  socket.send(JSON.stringify({ id, ...payload }));
  return new Promise((res) => pending.set(id, res));
}
socket.onmessage = (e) => {
  const msg = JSON.parse(e.data);
  if (pending.has(msg.id)) { pending.get(msg.id)(msg); pending.delete(msg.id); }
};

وضع الرسائل في قائمة الانتظار قبل الفتح

إذا كان من المحتمل أن ترسل رسالة قبل فتح المقبس، فخزّن الرسائل مؤقتًا وأرسلها عند إطلاق onopen.

const queue = [];
function safeSend(data) {
  if (socket.readyState === WebSocket.OPEN) socket.send(data);
  else queue.push(data);
}
socket.onopen = () => { queue.forEach((d) => socket.send(d)); queue.length = 0; };

التحقق من البيانات الواردة

لا تثق أبدًا بالبيانات الواردة عبر الشبكة. ضع JSON.parse داخل try/catch، وتحقّق من بنية البيانات قبل استخدامها.

socket.onmessage = (e) => {
  let msg;
  try { msg = JSON.parse(e.data); }
  catch { return; }
  if (typeof msg.type !== "string") return;
  handle(msg);
};

تحقق سريع

اختبر إرسال الرسائل واستقبالها.

مراجعة: الإرسال والاستقبال

أرسلت بيانات نصية وثنائية، وتعاملت مع onmessage، وغلّفت البيانات بصيغة JSON، ووجّهتها حسب النوع، وراقبت bufferedAmount للتحكم في التدفق، وأضفت نبضات تحقق، ووضعت الرسائل في قائمة انتظار قبل فتح المقبس. التالي: دورة حياة الاتصال.

الأسئلة الشائعة

هل درس «إرسال الرسائل واستقبالها» مجاني؟

نعم — نص درس «إرسال الرسائل واستقبالها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «إرسال الرسائل واستقبالها»؟

تبادلوا البيانات باستخدام send وonmessage. تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟

لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «إرسال الرسائل واستقبالها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟

نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. فتح اتصال WebSocket
  2. إرسال الرسائل واستقبالها
  3. دورة حياة الاتصال والأخطاء
  4. استراتيجيات إعادة الاتصال
← العودة إلى JavaScript Academy