Episode ini memperkenalkan Socket.IO: event-based messaging, reconnection otomatis, fallback ke long polling, rooms dan namespaces, serta perbandingan dengan native WebSocket untuk memutuskan kapan memakai yang mana.

Setelah membangun server ws murni di episode 5, kalian mungkin bertanya: kenapa harus repot membangun broadcast dan reconnection manual? Jawabannya adalah Socket.IO.
Socket.IO adalah library yang melapisi WebSocket dengan lapisan kemudahan: event-based messaging, reconnection otomatis, fallback ketika WebSocket diblokir, rooms, dan namespaces. Di episode ini kalian akan melihat kenapa Socket.IO sangat populer — dan juga kapan sebaiknya tetap memakai ws murni.
Socket.IO bukan pengganti WebSocket, melainkan pengaya:
chat:pesan, bukan raw string.npm install socket.io socket.io-clientnpm install socket.io socket.io-client menginstall dua paket: server untuk Node.js dan klien untuk browser.
Socket.IO memakai protokol sendiri yang berjalan di atas WebSocket atau polling. Akibatnya, klien Socket.IO tidak bisa bicara dengan server ws murni — dan sebaliknya. Untuk aplikasi yang butuh interoperabilitas protokol murni, ws tetap pilihan utama.
const { Server } = require("socket.io");
const http = require("http");
const server = http.createServer();
const io = new Server(server);
io.on("connection", (socket) => {
console.log("klien terhubung:", socket.id);
socket.on("chat:kirim", (pesan) => {
io.emit("chat:terima", pesan);
});
});
server.listen(8080);new Server(server) melampirkan Socket.IO ke server HTTP. Event connection memberi kalian objek socket dengan socket.id unik per klien. io.emit menyiarkan ke semua klien.
Dua arah komunikasi:
socket.emit("pesan", "dari server");
socket.on("event-klien", (data) => {
console.log("klien mengirim:", data);
});socket.emit mengirim ke satu klien, sementara io.emit mengirim ke semua. Episode 9 akan menambah varian to(room) dan except(socketId).
Socket.IO mendukung middleware yang berjalan sebelum event diproses:
io.use((socket, next) => {
const token = socket.handshake.auth.token;
if (token === "rahasia") {
next();
} else {
next(new Error("unauthorized"));
}
});io.use((socket, next) => {...}) memungkinkan kalian menolak koneksi sebelum klien masuk. Ini pintu masuk autentikasi yang akan kita bedah lengkap di episode 8.
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
socket.on("chat:terima", (pesan) => {
console.log("diterima:", pesan);
});
socket.emit("chat:kirim", "halo semua");
</script>const socket = io() menghubungkan klien ke server yang sama secara otomatis. socket.on dan socket.emit adalah kebalikan dari sisi server.
Klien bisa diatur dengan berbagai opsi:
const socket = io("https://server.example.com", {
reconnection: true,
reconnectionDelay: 1000,
reconnectionDelayMax: 5000,
reconnectionAttempts: Infinity,
timeout: 10000,
});Opsi di atas mengaktifkan reconnection dengan backoff. Detail konfigurasi ini akan dibahas lebih dalam di episode 12.
Pilih Socket.IO ketika:
Pilih ws ketika:
Warning
Socket.IO membungkus pesan dengan protokolnya sendiri. Jika aplikasi kalian harus berbicara langsung dengan perangkat IoT yang hanya mengerti WebSocket murni, Socket.IO tidak akan cocok tanpa lapisan tambahan.
Beberapa fitur yang akan sering kalian pakai sepanjang series:
socket.emit("tanya", data, (jawaban) => {...}) memungkinkan callback balasan.io.emit ke semua, socket.broadcast.emit ke semua kecuali pengirim.Episode 6 memperkenalkan Socket.IO sebagai lapisan kemudahan di atas WebSocket: event-based messaging, reconnection otomatis, fallback, middleware, dan opsi koneksi. Kalian juga sekarang bisa memutuskan kapan memakai Socket.IO dan kapan tetap setia pada ws murni.
Inti yang harus dibawa pulang:
Di episode 7 selanjutnya kita menggabungkan semua kemampuan: membangun aplikasi real-time pertama — chat sederhana dengan server, UI, join dan leave notification, daftar pengguna online, dan debugging via DevTools.