Pernah main Facebook? Line? Twitter?
Jika sekedar bermain aplikasi diatas, itu terlalu biasa, bagaimana jika membuat versi sendiri?
Mulai dari yang paling sederhana membuat sebuah chat dua arah, tiga arah, sampai membuat broadcast chat (banyak arah).
Awal membuat sebuah webchat sederhana yang terpikir adalah php, ya php server. Awal perjalanan membuat interface hingga sampai mulai membuat back-end server berjalan mulus. Pada saat pembuatan back-end mulai terasa susahnya memikirkan cara agar data bisa terkirim ke semua client secara realtime dan tentunya dengan data dan waktu yang seoptimal mungkin. Tidak semudah ekspektasi diawal.
Dengan php web chat sederhana ini bisa saja selesai tetapi dengan kode yang begitu panjang dan rumit, bahkan untuk menjaga chat tetap realtime-connected (terhubung terus-menerus ke server) mau tidak mau harus melakukan brute-force menggunakan interval waktu tertentu melakukan pengecekan berulang-ulang yang tidak efektif ke database.
Membuat sebuah web yang bekerja secara realtime, php mungkin adalah pilihan yang kurang tepat.
Node.js salah satu alternatif pilihan yang tepat dalam membangun sebuah web yang bekerja realtime. Anda bisa membaca berbagai artikel tentang apa itu Node.js, kegunaan, kelebihannya, dll.
Menggunakan Socket.IO salah satu module dari Node.js yang juga library-nya javascript, membuat sebuah asynchronus data untuk realtime chat sangat mudah.
Tidak terbayang, susah payah yang telah dikerjakan menggunakan php, ternyata semudah mengangkat tisu ketika menggunakan socket.io, yahh… serasa membuat sesuatu yang sebenarnya sudah ada -_-, sia-sia.
Cara kerjanya singkat seperti ini:
Client:
// fungsi untuk mengirim data, misalnya pesan
function kirim(pesan){
// Mengirim data ke server
socket.emit(‘pesan baru’, pesan);
}
// menerima data dari server
socket.on(‘pesan masuk’, function(respon){
//.. olah data
});
Server:
// server menerima data dari client dengan kunci ‘pesan baru’
socket.on(‘pesan baru’, function(data){
// data yang diterima di-broadcast ke seluruh client
socket.broadcast.emit(‘pesan masuk’, data);
});
Client mengirim pesan menggunakan fungsi kirim dengan kunci ‘pesan baru’ ke server lalu server menerima data dari client dengan kunci ‘pesan baru’, server mengolah respon sesuai kebutuhan misalnya respon langsung diteruskan ke semua client dengan kunci ‘pesan masuk’ (broadcast), kemudian client menerima data dari server dengan kunci ‘pesan masuk’.
Semudah itu, tidak perlu memikirkan hal lainnya dibelakang layar. Hampir semua pekerjaan pada Socket.IO dikerjakan hanya menggunakan kunci dan data, semudah itu.
Mudah bukan?
Bagi pembaca sekalian yang ingin membuat web realtime seperti web chat, menggunakan php adalah cara yang buruk, Anda hanya akan menghabiskan banyak waktu, Socket.IO bisa menjadi salah satu alternatif yang optimal.
Tidak hanya web, Socket.IO merupakan tool cross-platform Anda juga bisa menghubungkannya dengan iOS, android, dll.
contoh app.js
/*
* load module http, untuk membuat server
* load module socket.io
* load module fs untuk membaca file
*/
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');
/*
* setting aplikasi di port 8888
*/
app.listen(8888);
/*
* buat fungsi hendler , fungsi ini digunakan untuk konfigurasi server
*/
function handler (req, res) {
/*
* baca file index.html
*/
fs.readFile(__dirname + '/index.html',
function (err, data) {
/*
* tangani jika serever erorr
*/
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.on('connection', function (socket) {
socket.emit('transtv', { pesan: 'Hai saya pesan dari server untuk channel transtv' });
socket.on('tvone', function (data) {
console.log(data);
});
});
Reff:
https://riochr17.wordpress.com/2016/01/05/webchat-dan-socket-io/
