Maison >interface Web >js tutoriel >WebSockets, Socket.IO et communication en temps réel avec Node.js
La communication en temps réel est devenue une fonctionnalité clé des applications modernes, permettant des mises à jour instantanées, un échange de données en direct et des expériences utilisateur réactives. Des technologies comme WebSockets et Socket.IO sont à la pointe des interactions en temps réel. Cet article approfondira les concepts des WebSockets, comment les implémenter dans Node.js et comment Socket.IO simplifie la communication en temps réel.
WebSocket est un protocole de communication qui fournit des canaux de communication en duplex intégral sur une seule connexion TCP. Contrairement au protocole HTTP, qui fonctionne selon un modèle requête-réponse, WebSocket permet au serveur et au client de s'envoyer des messages à tout moment, en maintenant une connexion ouverte.
Caractéristiques clés :
Les WebSockets sont idéaux pour les applications qui nécessitent un échange de données en temps réel et à faible latence :
Node.js prend en charge nativement WebSocket via le package ws, une bibliothèque légère et efficace pour la communication WebSocket.
npm install ws
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');
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
Socket.IO est une bibliothèque populaire construite sur WebSockets qui simplifie la communication en temps réel. Il fournit un niveau d'abstraction supérieur, facilitant la mise en œuvre et la gestion d'événements en temps réel. Socket.IO prend également en charge les mécanismes de secours pour les navigateurs qui ne prennent pas en charge WebSockets, garantissant ainsi une large compatibilité.
Avantages de Socket.IO :
npm install socket.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'); });
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Socket.IO Chat</title> </head> <body> <input id="message" type="text" placeholder="Type a message"> <button id="send">Send</button> <ul id="messages"></ul> <script src="/socket.io/socket.io.js"></script> <script> const socket = io('http://localhost:3000'); // Listen for chat messages from the server socket.on('chat', (message) => { const li = document.createElement('li'); li.textContent = message; document.getElementById('messages').appendChild(li); }); // Send message to server when button is clicked document.getElementById('send').addEventListener('click', () => { const message = document.getElementById('message').value; socket.emit('chat', message); }); </script> </body> </html>
Une fois le serveur exécuté et que vous ouvrez le fichier HTML dans plusieurs navigateurs, les messages saisis dans un navigateur seront envoyés au serveur et diffusés à tous les clients connectés.
Les flux sont essentiels pour gérer des fichiers volumineux ou des données en morceaux plutôt que de charger l'intégralité du contenu en mémoire. Ils sont utiles pour :
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'); });
As your application grows, scaling becomes necessary to handle increased traffic and ensure high availability. Node.js applications can be scaled vertically or horizontally:
Node.js runs on a single thread, but using the cluster module, you can take advantage of multi-core systems by running multiple Node.js processes.
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 and Socket.IO offer real-time, bi-directional communication essential for modern web applications. Node.js streams efficiently handle large-scale data, and scaling with NGINX and Node’s cluster module ensures your application can manage heavy traffic. Together, these technologies enable robust, high-performance real-time applications.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!