Apa itu WebSocket, dan Cara Implementasi WebSocket pada NodeJS (Part 3 dari 3)

Free website hits

Apa itu WebSocket, dan Cara Implementasi WebSocket pada NodeJS (Part 3 dari 3)

Apa itu WebSocket, dan Cara Implementasi WebSocket pada NodeJS (Part 3 dari 3)
9 min read

Pendahuluan: Membawa WebSocket ke Level Berikutnya

Di dua bagian sebelumnya, kita telah mempelajari dasar WebSocket dan cara membuat komunikasi dua arah antara server dan client. Pada Part 3 ini, kita akan melanjutkan ke implementasi lanjutan, seperti:

  1. Menambahkan autentikasi pengguna.

  2. Mengintegrasikan WebSocket dengan ExpressJS.

  3. Mengoptimalkan performa dan keamanan WebSocket.

Tujuan akhirnya adalah membuat sistem WebSocket yang siap digunakan di lingkungan produksi.


1. Menggabungkan WebSocket dengan ExpressJS

Biasanya dalam proyek nyata, kita tidak hanya menggunakan WebSocket, tapi juga framework seperti ExpressJS untuk mengelola rute HTTP biasa. Untungnya, WebSocket bisa dengan mudah diintegrasikan dengan Express.

Contoh Kode:

const express = require("express");
const http = require("http");
const WebSocket = require("ws");

const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });

app.get("/", (req, res) => {
  res.send("Aplikasi WebSocket dengan Express");
});

wss.on("connection", (ws) => {
  console.log("Client terhubung melalui WebSocket");
  ws.on("message", (message) => {
    console.log("Pesan diterima:", message);
    ws.send("Pesan diterima oleh server melalui Express WebSocket");
  });
});

server.listen(3000, () => {
  console.log("Server berjalan di http://localhost:3000");
});

Kode di atas menunjukkan bahwa WebSocket bisa hidup berdampingan dengan Express dalam satu server.
Dengan begitu, kita bisa membuat API REST untuk data statis dan WebSocket untuk data real-time.


2. Menambahkan Autentikasi WebSocket

Dalam aplikasi produksi, tidak semua orang boleh mengakses koneksi WebSocket.
Salah satu cara sederhana untuk menambahkan keamanan adalah menggunakan token autentikasi (misalnya JWT) sebelum koneksi dibuka.

Contoh Autentikasi Token:

const jwt = require("jsonwebtoken");

wss.on("connection", (ws, req) => {
  const token = req.url.split("token=")[1];
  try {
    const user = jwt.verify(token, "rahasia");
    ws.user = user;
    console.log("User terautentikasi:", user.username);
  } catch (err) {
    ws.close();
    console.log("Autentikasi gagal");
  }
});

Dengan cara ini, hanya pengguna dengan token yang valid yang bisa tetap terhubung.


3. Optimisasi Performa dan Keamanan

Ketika jumlah client meningkat, performa menjadi faktor penting. Berikut beberapa tips agar sistem WebSocket tetap efisien:

a. Gunakan Kompresi Pesan

Aktifkan kompresi data untuk pesan yang dikirim agar lebih ringan.

const wss = new WebSocket.Server({ server, perMessageDeflate: true });

b. Gunakan Ping-Pong untuk Menjaga Koneksi

Beberapa koneksi bisa mati tanpa terdeteksi. Gunakan “ping-pong” untuk memastikan koneksi masih aktif.

setInterval(() => {
  wss.clients.forEach((ws) => {
    if (ws.isAlive === false) return ws.terminate();
    ws.isAlive = false;
    ws.ping();
  });
}, 30000);

c. Gunakan HTTPS dan WSS

Gunakan WSS (WebSocket Secure) agar data terenkripsi dan tidak mudah disadap.
Biasanya ini berjalan di atas HTTPS, menggunakan sertifikat SSL.


4. Menangani Skala Besar (Clustering)

Jika aplikasi Anda memiliki ribuan pengguna, WebSocket perlu dijalankan di beberapa server.
Untuk itu, gunakan sistem seperti Redis Pub/Sub untuk menghubungkan antar server WebSocket.

const redis = require("redis");
const publisher = redis.createClient();
const subscriber = redis.createClient();

subscriber.on("message", (channel, message) => {
  wss.clients.forEach((ws) => {
    if (ws.readyState === WebSocket.OPEN) ws.send(message);
  });
});

subscriber.subscribe("chat");

Dengan cara ini, pesan yang dikirim dari satu server akan diteruskan ke server lain melalui Redis.


Kesimpulan Akhir

Selama tiga bagian pembahasan ini, kita telah mempelajari:

  1. Konsep dasar dan cara kerja WebSocket.

  2. Implementasi dua arah dan broadcast antar client.

  3. Integrasi dengan Express, autentikasi, dan optimisasi performa.

Dengan pemahaman ini, Anda sekarang dapat membangun aplikasi real-time seperti chat, notifikasi, atau dashboard data langsung menggunakan NodeJS dan WebSocket.

Recommended for you