استخدام Socket.IO مع React
اتصل بخادم Socket.IO من React، واستمع إلى الأحداث، وأصدر الرسائل من hooks.
استخدام Socket.IO مع React درس مجاني في React Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
لماذا Socket.IO؟
تضيف Socket.IO الغرف ومساحات الأسماء وإعادة الاتصال التلقائية والرسائل القائمة على الأحداث فوق WebSockets، مع حل بديل يعتمد على الاستطلاع الطويل عبر HTTP، ما يجعلها أسهل بكثير في الاستخدام من WebSocket الخام.
تثبيت العميل
ثبّتوا حزمة عميل Socket.IO.
npm install socket.io-clientإنشاء مثيل Socket
استدعوا io(url) خارج مكوّنات React حتى تتم مشاركة الاتصال ولا يُعاد إنشاؤه عند كل عملية عرض. صدّروه كمثيل مفرد.
// src/lib/socket.ts
import { io } from 'socket.io-client';
export const socket = io('https://api.example.com', {
autoConnect: false, // connect manually
withCredentials: true,
});الاتصال في useEffect
اتصلوا عند تركيب المكوّن وافصلوا الاتصال عند إلغاء تركيبه لتجنّب الاتصالات المعلّقة.
useEffect(() => {
socket.connect();
return () => {
socket.disconnect();
};
}, []);الاستماع إلى الأحداث
استخدموا socket.on('event', handler) للاشتراك. أزيلوا المستمع في دالة التنظيف لمنع تكرار معالجات الأحداث عند إعادة العرض.
useEffect(() => {
function onMessage(data) {
setMessages(prev => [...prev, data]);
}
socket.on('message', onMessage);
return () => {
socket.off('message', onMessage);
};
}, []);إطلاق الأحداث
استدعوا socket.emit('event', data) لإرسال البيانات إلى الخادم. ويمكنكم اختيارياً تمرير دالة ردّ (إقرار) كآخر وسيط.
function sendMessage(text) {
socket.emit('message', { text, timestamp: Date.now() }, (ack) => {
console.log('Server acknowledged:', ack);
});
}خطاف useSocket مخصّص
غلّفوا منطق اتصال المقبس في خطاف مخصّص لإعادة استخدامه عبر المكوّنات.
function useSocket(event, handler) {
useEffect(() => {
socket.on(event, handler);
return () => socket.off(event, handler);
}, [event, handler]);
}
// Usage:
useSocket('message', (data) => setMessages(m => [...m, data]));الغرف ومساحات الأسماء
انضمّوا إلى غرفة بإطلاق حدث انضمام (تتم معالجته على الخادم). استخدموا مساحات الأسماء (io('/chat')) لتقسيم حركة المقابس على مستوى الاتصال.
// Join a room
socket.emit('join-room', 'room-123');
// Connect to a namespace
const chatSocket = io('https://api.example.com/chat');حالة الاتصال
تتبّعوا حالة الاتصال باستخدام أحداث connect وdisconnect وconnect_error.
const [isConnected, setIsConnected] = useState(socket.connected);
useEffect(() => {
socket.on('connect', () => setIsConnected(true));
socket.on('disconnect', () => setIsConnected(false));
return () => {
socket.off('connect');
socket.off('disconnect');
};
}, []);الإطلاقات غير المضمونة
استخدموا socket.volatile.emit() للرسائل التي لا يُشكّل فقدان بعض الحزم منها مشكلة (مثل مواضع المؤشر وحالة اللعبة).
// Position updates — OK to lose some
function onMouseMove(e) {
socket.volatile.emit('cursor', { x: e.clientX, y: e.clientY });
}Socket.IO مقابل WebSocket الخام
تضيف Socket.IO إدارة الغرف ومساحات الأسماء وإعادة الاتصال التلقائية ودعم البيانات الثنائية فوق WebSocket. استخدموا WebSocket الخام إذا كنتم تحتاجون إلى أقل قدر من الحمل الإضافي أو إذا كان الخادم لا يدعم Socket.IO.
تحقّق سريع
لماذا ينبغي إزالة مستمعي أحداث Socket.IO في عملية التنظيف الخاصة بـ useEffect؟
مراجعة
أنشئوا مثيلاً مفرداً من socket باستخدام io(url, { autoConnect: false }). اتصلوا وافصلوا الاتصال داخل useEffect، وأزيلوا المستمعين دائماً في عملية التنظيف، وأطلقوا الأحداث باستخدام socket.emit(). غلّفوا المنطق في خطاف مخصّص لإعادة استخدامه.
الأسئلة الشائعة
هل درس «استخدام Socket.IO مع React» مجاني؟
نعم — نص درس «استخدام Socket.IO مع React» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «استخدام Socket.IO مع React»؟
اتصل بخادم Socket.IO من React، واستمع إلى الأحداث، وأصدر الرسائل من hooks. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «استخدام Socket.IO مع React»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات WebSocket في المتصفح
- استخدام Socket.IO مع React
- إنشاء مكوّن دردشة فورية
- إعادة الاتصال ومعالجة الأخطاء والتنظيف