ChatApp with WebSocket, NodeJS, and MySQL: Building a Real-Time Chat Application

Free website hits

ChatApp with WebSocket, NodeJS, and MySQL: Building a Real-Time Chat Application

ChatApp with WebSocket, NodeJS, and MySQL: Building a Real-Time Chat Application
10 min read

Pendahuluan

Aplikasi chat adalah salah satu contoh paling umum dari penerapan komunikasi real-time di dunia web modern. Ketika seseorang mengirim pesan, pengguna lain dapat langsung melihatnya tanpa harus memuat ulang halaman. Hal ini dimungkinkan berkat teknologi WebSocket, sebuah protokol komunikasi yang memungkinkan koneksi dua arah antara client dan server.

Dalam artikel ini, kita akan membahas bagaimana membangun ChatApp sederhana menggunakan WebSocket, NodeJS, dan MySQL. Ketiga komponen ini akan bekerja sama untuk membuat sistem chat yang cepat, efisien, dan dapat diandalkan.


Apa Itu WebSocket?

WebSocket adalah protokol komunikasi yang memungkinkan interaksi dua arah (full-duplex) antara client dan server melalui satu koneksi TCP. Tidak seperti HTTP yang bersifat request–response, WebSocket memungkinkan server mengirim data ke client kapan pun diperlukan.

Artinya, ketika pengguna mengirim pesan, server bisa langsung meneruskan pesan tersebut ke semua pengguna lain yang sedang terkoneksi tanpa perlu menunggu permintaan baru dari client.


Mengapa Menggunakan NodeJS dan MySQL?

  • NodeJS sangat cocok untuk aplikasi real-time karena sifatnya yang asynchronous dan event-driven.

  • MySQL digunakan sebagai database untuk menyimpan data pengguna dan riwayat chat.

Kombinasi keduanya memungkinkan kita membuat server yang ringan, cepat, dan mudah dikembangkan.


Struktur Proyek

Berikut struktur folder sederhana untuk ChatApp:

chatapp/
|
|-- server.js
|-- package.json
|-- public/
|   |-- index.html
|   |-- script.js
|-- db/
    |-- database.sql

Diagram

1. Setup Database MySQL

Buat database bernama chatapp dan tabel untuk menyimpan pesan:

CREATE DATABASE chatapp;
USE chatapp;

CREATE TABLE messages (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50),
  message TEXT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2. Membuat Server NodeJS

Instal modul berikut:

npm init -y
npm install express ws mysql

Kemudian buat file server.js:

const express = require('express');
const WebSocket = require('ws');
const mysql = require('mysql');
const http = require('http');

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

// Koneksi ke database
const db = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'chatapp'
});
db.connect();

// Menyajikan file statis
app.use(express.static('public'));

wss.on('connection', (ws) => {
  console.log('User connected');

  ws.on('message', (data) => {
    const msg = JSON.parse(data);
    db.query('INSERT INTO messages (username, message) VALUES (?, ?)', [msg.username, msg.message]);
    // Kirim ke semua client
    wss.clients.forEach(client => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(JSON.stringify(msg));
      }
    });
  });
});

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

3. File Client HTML dan JavaScript

public/index.html:

<!DOCTYPE html>
<html>
<head>
  <title>ChatApp</title>
  <style>
    body { font-family: Arial; }
    #chatbox { height: 300px; overflow-y: scroll; border: 1px solid #ccc; padding: 10px; }
  </style>
</head>
<body>
  <h1>ChatApp Real-Time</h1>
  <div id="chatbox"></div>
  <input type="text" id="username" placeholder="Nama...">
  <input type="text" id="message" placeholder="Tulis pesan...">
  <button onclick="sendMessage()">Kirim</button>

  <script src="script.js"></script>
</body>
</html>

public/script.js:

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

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  const chatbox = document.getElementById('chatbox');
  chatbox.innerHTML += `<p><b>${data.username}:</b> ${data.message}</p>`;
};

function sendMessage() {
  const username = document.getElementById('username').value;
  const message = document.getElementById('message').value;
  ws.send(JSON.stringify({ username, message }));
  document.getElementById('message').value = '';
}

4. Uji Coba Aplikasi

Jalankan server:

node server.js

Buka beberapa tab browser di http://localhost:3000, lalu coba kirim pesan dari satu tab ke tab lain. Anda akan melihat pesan muncul secara real-time.


Kesimpulan

Dengan WebSocket, NodeJS, dan MySQL, kita dapat membangun sistem chat yang real-time, ringan, dan mudah diimplementasikan. Artikel ini hanya dasar dari ChatApp sederhana. Anda dapat mengembangkannya lebih lanjut, seperti menambahkan autentikasi pengguna, room chat, atau integrasi dengan REST API.

Recommended for you