الإخراج:

بمجرد تشغيل الخادم، وفتح ملف HTML في متصفحات متعددة، سيتم إرسال الرسائل المكتوبة في متصفح واحد إلى الخادم وبثها إلى جميع العملاء المتصلين.

تدفقات Node.js

تعد التدفقات ضرورية للتعامل مع الملفات الكبيرة أو البيانات في أجزاء بدلاً من تحميل المحتوى بأكمله في الذاكرة. وهي مفيدة لـ:

أنواع التدفقات في Node.js:

  1. التدفقات القابلة للقراءة: التدفقات التي يمكن قراءة البيانات منها (على سبيل المثال، قراءة نظام الملفات).
  2. التدفقات القابلة للكتابة: التدفقات التي يمكن كتابة البيانات إليها (على سبيل المثال، كتابة نظام الملفات).
  3. التدفقات المزدوجة: التدفقات التي يمكن القراءة منها والكتابة إليها (على سبيل المثال، مقابس TCP).
  4. تحويل التدفقات: التدفقات التي يمكنها تعديل البيانات أو تحويلها أثناء كتابتها وقراءتها (على سبيل المثال، ضغط الملفات).

مثال: قراءة ملف باستخدام التدفقات

const fs = require(\\'fs\\');// Create a readable streamconst readStream = fs.createReadStream(\\'largefile.txt\\', \\'utf8\\');// Listen to \\'data\\' event to read chunks of datareadStream.on(\\'data\\', (chunk) => {    console.log(\\'Reading chunk:\\', chunk);});// Listen to \\'end\\' event when the file is fully readreadStream.on(\\'end\\', () => {    console.log(\\'File reading complete\\');});

توسيع نطاق تطبيقات Node.js

مع نمو تطبيقك، يصبح التوسع ضروريًا للتعامل مع حركة المرور المتزايدة وضمان التوفر العالي. يمكن تحجيم تطبيقات Node.js عموديًا أو أفقيًا:

وحدة الكتلة في Node.js

يتم تشغيل Node.js على مؤشر ترابط واحد، ولكن باستخدام وحدة المجموعة، يمكنك الاستفادة من الأنظمة متعددة النواة عن طريق تشغيل عمليات Node.js متعددة.

const cluster = require(\\'cluster\\');const http = require(\\'http\\');const numCPUs = require(\\'os\\').cpus().length;if (cluster.isMaster) {    // Fork workers for each CPU    for (let i = 0; i < numCPUs; i  ) {        cluster.fork();    }    cluster.on(\\'exit\\', (worker, code, signal) => {        console.log(`Worker ${worker.process.pid} died`);    });} else {    // Workers can share the same HTTP server    http.createServer((req, res) => {        res.writeHead(200);        res.end(\\'Hello, world!\\\\n\\');    }).listen(8000);}

خاتمة

توفر WebSockets وSocket.IO اتصالات ثنائية الاتجاه في الوقت الفعلي ضرورية لتطبيقات الويب الحديثة. تتعامل تدفقات Node.js بكفاءة مع البيانات واسعة النطاق، ويضمن التوسع باستخدام NGINX ووحدة مجموعة Node قدرة تطبيقك على إدارة حركة المرور الكثيفة. تتيح هذه التقنيات معًا تطبيقات قوية وعالية الأداء في الوقت الفعلي.

","image":"http://www.luping.net/uploads/20240927/172744885266f6c714068ca.jpg","datePublished":"2024-11-02T05:36:07+08:00","dateModified":"2024-11-02T05:36:07+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > WebSockets وSocket.IO والتواصل في الوقت الفعلي مع Node.js

WebSockets وSocket.IO والتواصل في الوقت الفعلي مع Node.js

تم النشر بتاريخ 2024-11-02
تصفح:415

WebSockets, Socket.IO, and Real-Time Communication with Node.js

أصبح الاتصال في الوقت الفعلي سمة أساسية للتطبيقات الحديثة، مما يتيح التحديثات الفورية والتبادل المباشر للبيانات وتجارب المستخدم سريعة الاستجابة. تعتبر التقنيات مثل WebSockets وSocket.IO في طليعة التفاعلات في الوقت الفعلي. سوف تتعمق هذه المقالة في مفاهيم WebSockets، وكيفية تنفيذها في Node.js، وكيف يعمل Switch.IO على تبسيط الاتصال في الوقت الفعلي.

ما هو ويبسوكيت؟

WebSocket هو بروتوكول اتصال يوفر قنوات اتصال مزدوجة الاتجاه عبر اتصال TCP واحد. على عكس بروتوكول HTTP، الذي يعمل في نموذج الاستجابة للطلب، يسمح WebSocket للخادم والعميل بإرسال رسائل لبعضهما البعض في أي وقت، مع الحفاظ على اتصال مفتوح.

الخصائص الرئيسية:

  • الاتصال المستمر: يحافظ WebSocket على الاتصال مفتوحًا، مما يقلل الحاجة إلى إعادة تأسيس الاتصالات.
  • الاتصال ثنائي الاتجاه: يمكن لكل من الخادم والعميل إرسال الرسائل بحرية.
  • زمن الاستجابة المنخفض: نظرًا لأن WebSocket يحتفظ باتصال مفتوح، فإنه يلغي الحمل الزائد لطلبات HTTP، مما يقلل زمن الاستجابة.

متى تستخدم WebSockets؟

تعد WebSockets مثالية للتطبيقات التي تتطلب تبادل البيانات في الوقت الفعلي وبزمن وصول منخفض:

  • تطبيقات الدردشة (على سبيل المثال، Slack، WhatsApp Web)
  • تحديثات رياضية مباشرة
  • موجزات سوق الأسهم
  • أدوات التعاون في الوقت الفعلي (مثل مستندات Google)

إعداد WebSocket في Node.js

يدعم Node.js أصلاً WebSocket من خلال حزمة ws، وهي مكتبة خفيفة الوزن وفعالة للاتصال WebSocket.

الخطوة 1: تثبيت حزمة WebSocket

npm install ws

الخطوة 2: إنشاء خادم WebSocket

const WebSocket = require('ws');

// Create a WebSocket server that listens on port 8080
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
    console.log('Client connected');

    // When the server receives a message
    ws.on('message', (message) => {
        console.log('Received:', message);
        // Echo the message back to the client
        ws.send(`Server received: ${message}`);
    });

    // Handle connection close
    ws.on('close', () => {
        console.log('Client disconnected');
    });
});

console.log('WebSocket server is running on ws://localhost:8080');

توضيح:

  • يستمع خادم WebSocket على المنفذ 8080.
  • يتم تشغيل حدث الاتصال عندما يتصل العميل.
  • يتم تشغيل حدث الرسالة عندما يتلقى الخادم بيانات من العميل، ثم يقوم بإرجاعها مرة أخرى.

الخطوة 3: إنشاء عميل WebSocket

const ws = new WebSocket('ws://localhost:8080');

ws.on('open', () => {
    console.log('Connected to WebSocket server');
    // Send a message to the server
    ws.send('Hello Server!');
});

ws.on('message', (data) => {
    console.log('Received from server:', data);
});

ws.on('close', () => {
    console.log('Disconnected from server');
});

الإخراج:

Server Console:
Client connected
Received: Hello Server!
Client disconnected

Client Console:
Connected to WebSocket server
Received from server: Server received: Hello Server!
Disconnected from server

ما هو المقبس.IO؟

Socket.IO هي مكتبة شائعة مبنية على قمة WebSockets والتي تعمل على تبسيط الاتصال في الوقت الفعلي. فهو يوفر تجريدًا عالي المستوى، مما يسهل تنفيذ وإدارة الأحداث في الوقت الفعلي. يدعم المقبس.IO أيضًا الآليات الاحتياطية للمتصفحات التي لا تدعم WebSockets، مما يضمن التوافق الواسع.

مزايا المقبس.IO:

  • إعادة الاتصال التلقائي: يحاول إعادة الاتصال تلقائيًا في حالة فقدان الاتصال.
  • مساحة الاسم والغرف: ينظم الاتصالات في مساحات الأسماء والغرف، مما يسمح باتصالات أكثر تنظيماً.
  • النموذج المبني على الأحداث: يدعم الأحداث المخصصة، مما يجعل التواصل أكثر دلالة.

استخدام المقبس.IO مع Node.js

الخطوة 1: تثبيت المقبس.IO

npm install socket.io

الخطوة 2: إعداد خادم Switch.IO

const http = require('http');
const socketIo = require('socket.io');

// Create an HTTP server
const server = http.createServer();
const io = socketIo(server, {
    cors: {
        origin: "*",
        methods: ["GET", "POST"]
    }
});

// Handle client connection
io.on('connection', (socket) => {
    console.log('Client connected:', socket.id);

    // Listen for 'chat' events from the client
    socket.on('chat', (message) => {
        console.log('Received message:', message);
        // Broadcast the message to all connected clients
        io.emit('chat', `Server: ${message}`);
    });

    // Handle client disconnect
    socket.on('disconnect', () => {
        console.log('Client disconnected:', socket.id);
    });
});

server.listen(3000, () => {
    console.log('Socket.IO server running on http://localhost:3000');
});

توضيح:

  • يتم إنشاء خادم HTTP، وإرفاق المقبس (Socket.IO) به.
  • يتعامل حدث الاتصال مع اتصالات العميل الجديدة.
  • حدث الدردشة هو حدث مخصص لإرسال رسائل الدردشة، وبث الرسائل لجميع العملاء.

الخطوة 3: إنشاء عميل المقبس.IO



    
    Socket.IO Chat


    
    
    

    الإخراج:

    بمجرد تشغيل الخادم، وفتح ملف HTML في متصفحات متعددة، سيتم إرسال الرسائل المكتوبة في متصفح واحد إلى الخادم وبثها إلى جميع العملاء المتصلين.

    تدفقات Node.js

    تعد التدفقات ضرورية للتعامل مع الملفات الكبيرة أو البيانات في أجزاء بدلاً من تحميل المحتوى بأكمله في الذاكرة. وهي مفيدة لـ:

    • تحميل/تنزيل الملفات: تسمح لك التدفقات بمعالجة البيانات أثناء تحميلها أو تنزيلها.
    • التعامل مع البيانات الكبيرة: تعد التدفقات أكثر كفاءة في الذاكرة للتعامل مع الملفات الكبيرة أو البيانات المستمرة.

    أنواع التدفقات في Node.js:

    1. التدفقات القابلة للقراءة: التدفقات التي يمكن قراءة البيانات منها (على سبيل المثال، قراءة نظام الملفات).
    2. التدفقات القابلة للكتابة: التدفقات التي يمكن كتابة البيانات إليها (على سبيل المثال، كتابة نظام الملفات).
    3. التدفقات المزدوجة: التدفقات التي يمكن القراءة منها والكتابة إليها (على سبيل المثال، مقابس TCP).
    4. تحويل التدفقات: التدفقات التي يمكنها تعديل البيانات أو تحويلها أثناء كتابتها وقراءتها (على سبيل المثال، ضغط الملفات).

    مثال: قراءة ملف باستخدام التدفقات

    const fs = require('fs');
    
    // Create a readable stream
    const readStream = fs.createReadStream('largefile.txt', 'utf8');
    
    // Listen to 'data' event to read chunks of data
    readStream.on('data', (chunk) => {
        console.log('Reading chunk:', chunk);
    });
    
    // Listen to 'end' event when the file is fully read
    readStream.on('end', () => {
        console.log('File reading complete');
    });
    

    توسيع نطاق تطبيقات Node.js

    مع نمو تطبيقك، يصبح التوسع ضروريًا للتعامل مع حركة المرور المتزايدة وضمان التوفر العالي. يمكن تحجيم تطبيقات Node.js عموديًا أو أفقيًا:

    • القياس العمودي: زيادة الموارد (وحدة المعالجة المركزية، ذاكرة الوصول العشوائي) لجهاز واحد.
    • القياس الأفقي: تشغيل مثيلات متعددة لتطبيق Node.js الخاص بك عبر أجهزة أو مراكز مختلفة.

    وحدة الكتلة في Node.js

    يتم تشغيل Node.js على مؤشر ترابط واحد، ولكن باستخدام وحدة المجموعة، يمكنك الاستفادة من الأنظمة متعددة النواة عن طريق تشغيل عمليات Node.js متعددة.

    const cluster = require('cluster');
    const http = require('http');
    const numCPUs = require('os').cpus().length;
    
    if (cluster.isMaster) {
        // Fork workers for each CPU
        for (let i = 0; i  {
            console.log(`Worker ${worker.process.pid} died`);
        });
    } else {
        // Workers can share the same HTTP server
        http.createServer((req, res) => {
            res.writeHead(200);
            res.end('Hello, world!\n');
        }).listen(8000);
    }
    

    خاتمة

    توفر WebSockets وSocket.IO اتصالات ثنائية الاتجاه في الوقت الفعلي ضرورية لتطبيقات الويب الحديثة. تتعامل تدفقات Node.js بكفاءة مع البيانات واسعة النطاق، ويضمن التوسع باستخدام NGINX ووحدة مجموعة Node قدرة تطبيقك على إدارة حركة المرور الكثيفة. تتيح هذه التقنيات معًا تطبيقات قوية وعالية الأداء في الوقت الفعلي.

    بيان الافراج هذه المقالة مستنسخة على: https://dev.to/imsushant12/websockets-socketio-and-real-time-communication-with-nodejs-4ea0?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] للحذف هو - هي
    أحدث البرنامج التعليمي أكثر>

    تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

    Copyright© 2022 湘ICP备2022001581号-3