cari
Rumahhujung hadapan webtutorial jsWebSockets dan Socket.IO: Komunikasi Masa Nyata dengan Node.js

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

Komunikasi masa nyata adalah penting dalam aplikasi moden seperti apl sembang, permainan dalam talian dan alatan kerjasama langsung. WebSockets menyediakan saluran komunikasi dupleks penuh melalui sambungan TCP tunggal, membolehkan pertukaran data antara klien dan pelayan dalam masa nyata. Artikel ini akan menerangkan WebSockets, kes penggunaannya dan cara melaksanakannya dalam Node.js. Selain itu, kami akan menyelami Socket.IO, perpustakaan popular yang memudahkan komunikasi WebSocket, bersama-sama dengan contoh praktikal.

Dalam artikel ini, kami akan membincangkan:

  1. Apakah itu WebSockets?
  2. WebSockets vs HTTP: Perbezaan utama.
  3. Menyediakan pelayan WebSocket dalam Node.js.
  4. Apakah itu Socket.IO, dan mengapa anda perlu menggunakannya?
  5. Menyediakan aplikasi sembang masa nyata menggunakan Socket.IO.
  6. Kes penggunaan untuk WebSockets dan Socket.IO.
  7. Menjamin sambungan WebSocket.

Apakah itu WebSockets?

WebSockets menyediakan protokol komunikasi dua arah yang membolehkan pelayan dan klien menghantar data pada bila-bila masa. Tidak seperti HTTP, di mana pelanggan memulakan semua komunikasi dan meminta data daripada pelayan, WebSockets mendayakan sambungan berterusan, membolehkan kedua-dua pihak bertukar data secara berterusan tanpa mewujudkan semula sambungan.

Ciri-ciri Utama:

  • Kependaman Rendah: Soket Web mempunyai overhed yang lebih rendah berbanding HTTP, kerana sambungan sentiasa terbuka, mengurangkan kependaman.
  • Dupleks Penuh: Kedua-dua pelayan dan pelanggan boleh menghantar dan menerima data secara serentak.
  • Sambungan Berterusan: Setelah diwujudkan, sambungan WebSocket kekal terbuka, tidak seperti HTTP, di mana setiap permintaan membuka sambungan baharu.

WebSockets vs HTTP: Perbezaan Utama

Walaupun kedua-dua protokol dijalankan melalui TCP, ia mempunyai perbezaan yang ketara:

Feature WebSockets HTTP
Connection Persistent, full-duplex Stateless, new connection for each request
Directionality Bi-directional (server and client communicate) Client to server only (server responds)
Overhead Low after connection establishment Higher due to headers with every request
Use Case Real-time applications (chats, games) Traditional websites, API requests
Ciri WebSockets HTTP Sambungan Berterusan, dupleks penuh Sambungan baharu tanpa status untuk setiap permintaan Arah Arah Dwiarah (pelayan dan klien berkomunikasi) Pelanggan kepada pelayan sahaja (pelayan bertindak balas) Overhed Rendah selepas penubuhan sambungan Lebih tinggi disebabkan pengepala dengan setiap permintaan Kes Penggunaan Aplikasi masa nyata (sembang, permainan) Tapak web tradisional, permintaan API

Setting Up a WebSocket Server in Node.js

To create a WebSocket server, Node.js provides a built-in ws library that allows you to create a WebSocket server and establish communication with clients.

Installation:

npm install ws

WebSocket Server Example:

const WebSocket = require('ws');

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

// Listen for incoming connections
wss.on('connection', (ws) => {
    console.log('Client connected');

    // Send a message to the client
    ws.send('Welcome to the WebSocket server!');

    // Listen for messages from the client
    ws.on('message', (message) => {
        console.log(`Received: ${message}`);
        ws.send(`Echo: ${message}`);
    });

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

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

In this example:

  • A WebSocket server is created that listens on port 8080.
  • When a client connects, the server sends a welcome message and listens for messages from the client.
  • The server responds with an echo of the message received from the client.

Client-Side WebSocket:

On the client side, you can connect to the WebSocket server using JavaScript:

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

// Event listener for when the connection is established
socket.addEventListener('open', (event) => {
    socket.send('Hello Server!');
});

// Listen for messages from the server
socket.addEventListener('message', (event) => {
    console.log(`Message from server: ${event.data}`);
});

What is Socket.IO, and Why Should You Use It?

Socket.IO is a library that makes WebSocket communication easier by providing:

  • Automatic fallback to long polling if WebSockets aren’t supported.
  • Built-in reconnection and error handling mechanisms.
  • Support for rooms and namespaces, which allow for segmented communication channels.

Installation:

npm install socket.io

Setting Up a Socket.IO Server:

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

const app = express();
const server = http.createServer(app);
const io = socketIo(server);

// Listen for incoming connections
io.on('connection', (socket) => {
    console.log('New client connected');

    // Listen for messages from the client
    socket.on('message', (msg) => {
        console.log(`Message from client: ${msg}`);
        socket.emit('response', `Server received: ${msg}`);
    });

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

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

In this code:

  • A basic Express server is created, and Socket.IO is integrated to handle real-time communication.
  • The server listens for client connections and responds to any messages sent.

Setting Up a Real-Time Chat Application Using Socket.IO

Let's build a simple real-time chat application using Socket.IO to demonstrate its power.

Server Code:

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {
    console.log('A user connected');

    // Broadcast when a user sends a message
    socket.on('chat message', (msg) => {
        io.emit('chat message', msg);
    });

    socket.on('disconnect', () => {
        console.log('User disconnected');
    });
});

server.listen(3000, () => {
    console.log('Listening on *:3000');
});

Client Code (index.html):



    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Socket.IO Chat</title>
    <script src="/socket.io/socket.io.js"></script>


    <h1 id="Real-time-Chat">Real-time Chat</h1>
    
    <script> const socket = io(); // Listen for incoming chat messages socket.on('chat message', (msg) => { const li = document.createElement('li'); li.textContent = msg; document.getElementById('messages').appendChild(li); }); // Send chat message const form = document.getElementById('chatForm'); form.addEventListener('submit', (e) => { e.preventDefault(); const message = document.getElementById('message').value; socket.emit('chat message', message); document.getElementById('message').value = ''; }); </script>

    This simple chat application allows multiple users to connect and exchange messages in real-time. Messages sent by one user are broadcast to all other users connected to the server.

    Use Cases for WebSockets and Socket.IO

    WebSockets and Socket.IO are perfect for scenarios requiring real-time communication, including:

    • Chat Applications: Real-time messaging is made possible by WebSockets or Socket.IO.
    • Online Gaming: Multiplayer online games where players need to see updates in real-time.
    • Collaborative Editing: Applications like Google Docs use WebSockets to allow multiple users to edit documents simultaneously.
    • Live Dashboards: Real-time updates in dashboards for stock markets, sports scores, etc.

    Securing WebSocket Connections

    Like HTTP, WebSocket connections should be secured to protect sensitive data. This can be done by using wss:// (WebSocket Secure), which is essentially WebSockets over TLS (Transport Layer Security).

    Steps to Secure WebSocket with TLS:

    1. Obtain an SSL Certificate from a Certificate Authority (CA).
    2. Update WebSocket Server to listen on wss:// instead of ws://.
    3. Configure NGINX or another reverse proxy to terminate the SSL and forward traffic to your WebSocket server.

    Example NGINX configuration:

    server {
        listen 443 ssl;
        server_name yourdomain.com;
    
        ssl_certificate /etc/ssl/certs/yourdomain.crt;
        ssl_certificate_key /etc/ssl/private/yourdomain.key;
    
        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
    

    This ensures that all WebSocket traffic is encrypted, protecting it from eavesdropping and tampering.

    Conclusion

    WebSockets and Socket.IO enable real-time communication between clients and servers, which is essential for modern applications requiring instant updates. By implementing WebSocket or Socket.IO-based solutions, you can build responsive and efficient applications such as chat systems, collaborative tools, and live dashboards.

    In this article, we've covered the basics of WebSockets, the advantages of using Socket.IO, and how to create real-time applications in Node.js. Additionally, we've explored how to secure WebSocket connections to ensure data safety during transmission.

    Mastering these technologies will open up numerous possibilities for building powerful, interactive, and scalable web applications.

    Atas ialah kandungan terperinci WebSockets dan Socket.IO: Komunikasi Masa Nyata dengan Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    JavaScript dan Web: Fungsi teras dan kes penggunaanJavaScript dan Web: Fungsi teras dan kes penggunaanApr 18, 2025 am 12:19 AM

    Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

    Memahami Enjin JavaScript: Butiran PelaksanaanMemahami Enjin JavaScript: Butiran PelaksanaanApr 17, 2025 am 12:05 AM

    Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

    Python vs JavaScript: Keluk Pembelajaran dan Kemudahan PenggunaanPython vs JavaScript: Keluk Pembelajaran dan Kemudahan PenggunaanApr 16, 2025 am 12:12 AM

    Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

    Python vs JavaScript: Komuniti, Perpustakaan, dan SumberPython vs JavaScript: Komuniti, Perpustakaan, dan SumberApr 15, 2025 am 12:16 AM

    Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

    Dari C/C ke JavaScript: Bagaimana semuanya berfungsiDari C/C ke JavaScript: Bagaimana semuanya berfungsiApr 14, 2025 am 12:05 AM

    Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

    Enjin JavaScript: Membandingkan PelaksanaanEnjin JavaScript: Membandingkan PelaksanaanApr 13, 2025 am 12:05 AM

    Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

    Beyond the Browser: JavaScript di dunia nyataBeyond the Browser: JavaScript di dunia nyataApr 12, 2025 am 12:06 AM

    Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

    Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Apr 11, 2025 am 08:23 AM

    Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

    See all articles

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Tetapan grafik terbaik
    1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
    Akan R.E.P.O. Ada Crossplay?
    1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    MinGW - GNU Minimalis untuk Windows

    MinGW - GNU Minimalis untuk Windows

    Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    Versi Mac WebStorm

    Versi Mac WebStorm

    Alat pembangunan JavaScript yang berguna

    Dreamweaver Mac版

    Dreamweaver Mac版

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)