0Pricing
Frontend Academy · Pelajaran

Integrasi Klien Socket.io

Hubungkan klien Socket.io, dengarkan event bernama, kirim data ke server, tangani logika koneksi ulang, dan kelola room dari sisi klien.

Integrasi Klien Socket.io adalah pelajaran Frontend Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Frontend Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Frontend Academy mencakup 4 pelajaran total.

Apa yang Ditambahkan Socket.io dibandingkan WebSocket Mentah

Socket.io adalah pustaka populer yang dibangun di atas WebSocket. Socket.io menambahkan: penyambungan kembali otomatis, pengganti ke long-polling, ruang/namespaces, callback konfirmasi, dan peristiwa bernama. Pustaka klien dipasangkan dengan pustaka server (Node.js).

Memasang Klien

Pasang socket.io-client. Versi mayornya harus sama dengan versi mayor server.

npm install socket.io-client

Menyambungkan

Impor io dan sambungkan ke URL server. Fungsi ini mengembalikan instans Socket.

import { io } from 'socket.io-client';

const socket = io('https://api.example.com', {
  transports: ['websocket'], // skip polling fallback for speed
  auth: { token: localStorage.getItem('jwt') }
});

socket.on('connect', () => console.log('connected', socket.id));

Memancarkan Peristiwa

socket.emit(eventName, payload) mengirim peristiwa bernama beserta data — jauh lebih rapi daripada send mentah + JSON.parse.

socket.emit('chat-message', {
  room: 'general',
  text: 'Hello everyone!'
});

socket.emit('typing', { user: 'Alice' });

Mendengarkan Peristiwa

socket.on(eventName, handler) mendaftarkan pendengar. Peristiwa yang dipancarkan server tiba di sini.

socket.on('chat-message', (msg) => {
  console.log(`${msg.user}: ${msg.text}`);
  appendMessage(msg);
});

socket.on('user-joined', (user) => {
  console.log(`${user.name} joined`);
});

Konfirmasi (Callback Ack)

Berikan callback sebagai argumen terakhir emit — server dapat memanggilnya dengan respons. Mirip RPC.

socket.emit('create-post', { title: 'Hello' }, (response) => {
  if (response.error) {
    console.error(response.error);
  } else {
    console.log('Created post', response.id);
  }
});

emitWithAck Berbasis Promise

Socket.io modern menyediakan emitWithAck yang mengembalikan promise.

try {
  const response = await socket.emitWithAck('create-post', { title: 'Hello' });
  console.log('Created', response.id);
} catch (err) {
  console.error('Failed', err);
}

Ruang

Ruang adalah pengelompokan soket di sisi server. Klien bergabung atau keluar dengan memancarkan peristiwa; server menggunakan io.to(room).emit() untuk menyiarkan pesan.

// Client:
socket.emit('join-room', { roomId: 'general' });

// Listen to messages in any room you've joined:
socket.on('room-message', ({ room, message }) => {
  if (room === activeRoom) appendMessage(message);
});

// Leave:
socket.emit('leave-room', { roomId: 'general' });

Ruang Nama

Ruang nama adalah saluran komunikasi terpisah pada server yang sama — misalnya, /chat dan /admin. Sambungkan ke ruang nama dengan menambahkan akhiran pada URL.

const chatSocket = io('https://api/chat');
const adminSocket = io('https://api/admin');

Penyambungan Kembali Bawaan

Socket.io tersambung kembali secara otomatis dengan jeda eksponensial. Konfigurasikan melalui opsi.

const socket = io({
  reconnection: true,
  reconnectionAttempts: Infinity,
  reconnectionDelay: 1000,
  reconnectionDelayMax: 30000,
  randomizationFactor: 0.5
});

socket.on('reconnect', (attempt) => console.log('reconnected after', attempt));
socket.on('reconnect_attempt', (attempt) => console.log('trying...', attempt));

Penanganan Pemutusan Koneksi

Dengarkan peristiwa pemutusan koneksi untuk memperbarui UI (tampilkan banner 'menyambungkan kembali...').

socket.on('disconnect', (reason) => {
  console.log('Disconnected:', reason);
  if (reason === 'io server disconnect') {
    // Server kicked us — must reconnect manually
    socket.connect();
  }
});

Integrasi React

Bungkus siklus hidup socket dalam hook khusus atau penyedia Context.

// useSocket.ts
import { useEffect, useState } from 'react';
import { io, Socket } from 'socket.io-client';

let socket: Socket;

export function useSocket() {
  const [connected, setConnected] = useState(false);
  useEffect(() => {
    if (!socket) socket = io('/');
    socket.on('connect', () => setConnected(true));
    socket.on('disconnect', () => setConnected(false));
    return () => { /* keep socket alive across remounts */ };
  }, []);
  return { socket, connected };
}

Kapan Menggunakan Socket.io dibandingkan WebSocket Mentah

Socket.io: saat Anda menginginkan ruang, callback konfirmasi, penyambungan kembali otomatis, dan pengganti transportasi yang langsung tersedia. WebSocket mentah: saat Anda memerlukan kendali protokol tingkat rendah, ukuran bundel minimal, atau interoperabilitas dengan server non-Socket.io.

Pemeriksaan Singkat

Apa yang dimungkinkan oleh callback argumen ketiga emit(event, payload, callback) milik Socket.io?

Ringkasan: Klien Socket.io

Pustaka yang dibangun di atas WebSocket: ruang, ruang nama, konfirmasi, penyambungan kembali otomatis, dan pengganti polling. io(url, options) menyambungkan. emit(event, payload) mengirim peristiwa bernama; on(event, handler) mendengarkan. Callback argumen ketiga atau emitWithAck digunakan untuk pola seperti RPC. Ruang dikelola melalui server, sedangkan ruang nama ditentukan oleh akhiran URL. Penyambungan kembali sudah tersedia secara bawaan. Bungkus dalam hook React untuk mengelola siklus hidup.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Integrasi Klien Socket.io” gratis?

Ya — teks lengkap “Integrasi Klien Socket.io” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Frontend Academy, upgrade ke CoddyKit PRO. Kursus Frontend Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Integrasi Klien Socket.io”?

Hubungkan klien Socket.io, dengarkan event bernama, kirim data ke server, tangani logika koneksi ulang, dan kelola room dari sisi klien. Kamu berlatih Frontend Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Frontend Academy?

Tidak diperlukan pengalaman sebelumnya. Frontend Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Integrasi Klien Socket.io” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Frontend Academy ini?

Ya. Setiap pelajaran Frontend Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. API WebSocket: buka pesan tutup error
  2. Integrasi Klien Socket.io
  3. Server-Sent Events untuk Streaming Satu Arah
  4. Pola UI Waktu Nyata
← Kembali ke Frontend Academy