Rumah  >  Artikel  >  hujung hadapan web  >  Bekerja dengan WebSocket dan Komunikasi Masa Nyata dalam Node.js

Bekerja dengan WebSocket dan Komunikasi Masa Nyata dalam Node.js

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 12:01:03688semak imbas

Working with WebSocket and Real-Time Communication in Node.js

Dalam aplikasi moden, komunikasi masa nyata adalah penting, terutamanya untuk ciri seperti sembang langsung, pemberitahuan dan alatan kerjasama. WebSocket ialah protokol yang membolehkan komunikasi dua arah antara klien dan pelayan melalui sambungan tunggal yang tahan lama. Artikel ini merangkumi WebSocket, pelaksanaannya dalam Node.js dan peranan Socket.IO, perpustakaan popular yang memudahkan penggunaan WebSocket dalam aplikasi masa nyata.

WebSocket: Apa, Mengapa, dan Bagaimana?

WebSocket ialah protokol yang mengekalkan sambungan berterusan, membenarkan pertukaran data tanpa kitaran permintaan-tindak balas yang berterusan HTTP. Beberapa kes penggunaan termasuk:

  • Aplikasi Pemesejan langsung (cth., bilik sembang)
  • Permainan dalam talian memerlukan kemas kini masa nyata
  • Pemberitahuan untuk acara dalam aplikasi media sosial
  • Alat kolaboratif (cth., Dokumen Google)

Bagaimana WebSocket Berfungsi

  1. Pelanggan mewujudkan sambungan HTTP dengan pelayan.
  2. Pelayan menaik taraf sambungan ini kepada protokol WebSocket.
  3. Kedua-dua pelanggan dan pelayan kemudiannya boleh menghantar dan menerima mesej dalam masa nyata melalui sambungan berterusan ini.

Melaksanakan WebSocket dalam Node.j

Pelayan WebSocket Asas dengan ws

Mari bina pelayan WebSocket mudah menggunakan pakej ws.

Langkah 1: Pasang ws:

npm install ws

Langkah 2: Buat pelayan WebSocket:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (socket) => {
  console.log('Client connected');

  // Listening for messages from the client
  socket.on('message', (message) => {
    console.log(`Received message: ${message}`);
    // Echo message back to client
    socket.send(`Server: ${message}`);
  });

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

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

Langkah 3: Menyambung dari sisi pelanggan:

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

  socket.onopen = () => {
    console.log('Connected to server');
    socket.send('Hello Server!');
  };

  socket.onmessage = (event) => {
    console.log(`Received from server: ${event.data}`);
  };
</script>

Memperkenalkan Socket.IO: Pengurusan WebSocket Ringkas

Socket.IO ialah perpustakaan yang memudahkan komunikasi masa nyata dan menambahkan ciri seperti penyambungan semula automatik dan penyiaran.

Pemasangan Socket.IO

npm install socket.io

Membina Aplikasi Sembang Masa Nyata dengan Socket.IO

Pelaksanaan Bahagian Pelayan:

const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

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

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

  socket.on('chat message', (msg) => {
    // Broadcast message to all connected clients
    io.emit('chat message', msg);
  });

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

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

Pelaksanaan Sebelah Pelanggan:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Real-Time Chat</title>
</head>
<body>
  <h1>Chat Room</h1>
  <input>



<h2>
  
  
  Node.js Streams: Efficient Data Handling
</h2>

<p>Node.js streams provide a way to process data piece by piece, which is particularly useful for handling large files.</p>

<h3>
  
  
  Types of Streams
</h3>

<ol>
<li>
<strong>Readable</strong>: For reading data from a source.</li>
<li>
<strong>Writable</strong>: For writing data to a destination.</li>
<li>
<strong>Duplex</strong>: For both reading and writing.</li>
<li>
<strong>Transform</strong>: For modifying or transforming data as it’s read or written.</li>
</ol>

<h3>
  
  
  Example: Reading a Large File with Streams
</h3>



<pre class="brush:php;toolbar:false">const fs = require('fs');

const readStream = fs.createReadStream('largefile.txt', { encoding: 'utf8' });

readStream.on('data', (chunk) => {
  console.log('New chunk received:', chunk);
});

readStream.on('end', () => {
  console.log('File reading completed');
});

Menskalakan Aplikasi Node.js

Menskalakan aplikasi Node.js memastikan ia boleh mengendalikan beban yang meningkat dengan menambahkan lebih banyak sumber.

Penskalaan Mendatar

  • Letakkan berbilang contoh permohonan dan permintaan imbangan beban.

Penskalaan Menegak

  • Tingkatkan kuasa pelayan (CPU, memori) untuk mengendalikan lebih banyak permintaan.

NGINX: Pengimbangan Beban dan Penyajian Kandungan Statik

NGINX ialah pelayan web yang sering digunakan untuk pengimbangan beban, caching dan menyajikan kandungan statik.

Contoh: Melayan Fail Statik dengan NGINX

  1. Pasang NGINX
npm install ws
  1. Konfigurasikan NGINX

Edit /etc/nginx/sites-available/default:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (socket) => {
  console.log('Client connected');

  // Listening for messages from the client
  socket.on('message', (message) => {
    console.log(`Received message: ${message}`);
    // Echo message back to client
    socket.send(`Server: ${message}`);
  });

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

console.log('WebSocket server is running on ws://localhost:8080');
  1. Mulakan NGINX
<script>
  const socket = new WebSocket('ws://localhost:8080');

  socket.onopen = () => {
    console.log('Connected to server');
    socket.send('Hello Server!');
  };

  socket.onmessage = (event) => {
    console.log(`Received from server: ${event.data}`);
  };
</script>

SSL dan Keselamatan

SSL menyulitkan data antara klien dan pelayan, menambah lapisan keselamatan. Untuk menyediakan SSL:

  1. Jana sijil SSL (atau dapatkan sijil daripada pembekal).
  2. Konfigurasikan NGINX untuk menggunakan SSL:
npm install socket.io

Kesimpulan

Artikel ini telah meneroka keperluan komunikasi masa nyata, pengendalian data yang cekap, penskalaan dan mendapatkan aplikasi Node.js untuk penggunaan peringkat pengeluaran. Strim WebSockets, Socket.IO, NGINX dan Node.js ialah alatan berkuasa yang meningkatkan interaktiviti aplikasi, pengurusan data dan keselamatan untuk pengalaman dan kebolehskalaan pengguna yang lebih baik.

Atas ialah kandungan terperinci Bekerja dengan WebSocket dan Komunikasi Masa Nyata dalam 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