unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Socket

Socket #

Socket programming dalam TypeScript memungkinkan komunikasi dua arah antara klien dan server melalui jaringan. Sockets adalah salah satu cara untuk mengimplementasikan komunikasi real-time, dan sering digunakan dalam aplikasi seperti obrolan, game online, dan pembaruan data secara langsung. Di TypeScript, socket programming biasanya dilakukan dengan menggunakan WebSocket untuk aplikasi berbasis browser atau menggunakan socket.io dan modul net di Node.js untuk aplikasi server.

WebSocket di Browser #

WebSocket adalah protokol komunikasi yang menyediakan komunikasi full-duplex (dua arah) melalui satu koneksi TCP. WebSocket memungkinkan klien dan server untuk saling mengirim pesan kapan saja tanpa harus membuat koneksi HTTP baru.

Menggunakan WebSocket di TypeScript (Browser) #

Contoh Implementasi WebSocket di Klien:

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

// Event ketika koneksi berhasil dibuka
socket.addEventListener('open', (event) => {
    console.log('Connected to the server');
    socket.send('Hello Server!');
});

// Event ketika menerima pesan dari server
socket.addEventListener('message', (event) => {
    console.log('Message from server:', event.data);
});

// Event ketika terjadi error
socket.addEventListener('error', (event) => {
    console.error('WebSocket error:', event);
});

// Event ketika koneksi ditutup
socket.addEventListener('close', (event) => {
    console.log('Disconnected from the server');
});
  • WebSocket: Membuat koneksi WebSocket ke server pada URL yang ditentukan.
  • addEventListener('open', ...): Mendengarkan event ketika koneksi WebSocket berhasil dibuka.
  • addEventListener('message', ...): Mendengarkan pesan yang dikirim dari server.
  • send(): Mengirim pesan ke server.
  • addEventListener('close', ...): Mendengarkan event ketika koneksi WebSocket ditutup.

Socket Programming di Node.js #

Di lingkungan Node.js, Anda dapat menggunakan modul net bawaan atau pustaka socket.io untuk melakukan socket programming.

Menggunakan Modul net di Node.js #

Modul net di Node.js menyediakan API untuk membangun server dan klien TCP.

Contoh Implementasi Server dengan Modul net:

import * as net from 'net';

const server = net.createServer((socket) => {
    console.log('Client connected');

    socket.on('data', (data) => {
        console.log('Received:', data.toString());
        socket.write('Hello Client!');
    });

    socket.on('end', () => {
        console.log('Client disconnected');
    });

    socket.on('error', (err) => {
        console.error('Socket error:', err);
    });
});

server.listen(8080, () => {
    console.log('Server listening on port 8080');
});
  • net.createServer(): Membuat server TCP yang mendengarkan koneksi masuk dari klien.
  • socket.on('data', ...): Menangani data yang diterima dari klien.
  • socket.write(): Mengirim data ke klien.
  • server.listen(): Memulai server dan mendengarkan koneksi pada port yang ditentukan.

Contoh Implementasi Klien dengan Modul net:

import * as net from 'net';

const client = net.createConnection({ port: 8080 }, () => {
    console.log('Connected to server');
    client.write('Hello Server!');
});

client.on('data', (data) => {
    console.log('Received from server:', data.toString());
    client.end();
});

client.on('end', () => {
    console.log('Disconnected from server');
});

client.on('error', (err) => {
    console.error('Client error:', err);
});
  • net.createConnection(): Membuat koneksi TCP ke server.
  • client.write(): Mengirim data ke server.
  • client.on('data', ...): Menangani data yang diterima dari server.

Menggunakan Socket.io di Node.js #

Socket.io adalah pustaka populer untuk mengimplementasikan WebSocket dan fallback HTTP dalam aplikasi Node.js. Socket.io memudahkan pengembangan aplikasi real-time dengan penanganan otomatis terhadap koneksi klien dan server.

Contoh Implementasi Server dengan Socket.io:

import { Server } from 'socket.io';
import * as http from 'http';

const server = http.createServer();
const io = new Server(server, {
    cors: {
        origin: "*", // Izinkan semua asal (untuk pengujian)
    },
});

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

    socket.on('message', (message) => {
        console.log('Received:', message);
        socket.emit('response', 'Hello from Server!');
    });

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

server.listen(8080, () => {
    console.log('Socket.io server listening on port 8080');
});
  • new Server(): Membuat instance Socket.io dan mengaitkannya dengan server HTTP.
  • io.on('connection', ...): Mendengarkan koneksi klien baru.
  • socket.emit(): Mengirim pesan ke klien yang terhubung.
  • socket.on('message', ...): Menangani pesan yang diterima dari klien.

Contoh Implementasi Klien dengan Socket.io:

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

const socket = io('http://localhost:8080');

socket.on('connect', () => {
    console.log('Connected to server');
    socket.emit('message', 'Hello Server!');
});

socket.on('response', (data) => {
    console.log('Received from server:', data);
});

socket.on('disconnect', () => {
    console.log('Disconnected from server');
});
  • io(): Membuat koneksi klien ke server Socket.io.
  • socket.emit(): Mengirim pesan ke server.
  • socket.on(): Mendengarkan pesan atau event dari server.

Keamanan dan Best Practices #

Saat bekerja dengan socket, ada beberapa praktik terbaik yang perlu diperhatikan:

  • Autentikasi dan Otorisasi: Pastikan untuk mengautentikasi dan mengotorisasi pengguna atau klien yang menghubungkan socket mereka ke server untuk mencegah akses yang tidak sah.
  • Penanganan Kesalahan: Selalu sertakan penanganan kesalahan untuk koneksi socket, baik di sisi klien maupun server.
  • Penggunaan TLS/SSL: Untuk komunikasi yang aman, gunakan WebSocket Secure (wss://) atau konfigurasi SSL/TLS pada koneksi TCP.

Kesimpulan #

Socket programming dalam TypeScript memungkinkan Anda untuk membangun aplikasi real-time yang dapat berkomunikasi secara efisien antara klien dan server. Dengan menggunakan WebSocket untuk aplikasi berbasis browser, modul net untuk aplikasi TCP di Node.js, atau pustaka seperti Socket.io untuk solusi yang lebih fleksibel dan mudah digunakan, Anda dapat membangun aplikasi yang mendukung komunikasi dua arah dengan berbagai kasus penggunaan, seperti chat, game, dan sistem notifikasi real-time.

« I/O
Web Socket »