Berkenalan dengan Socket.io
Catatan : bahwa tulisan ini bukan tutorial membuat aplikasi menggunakan socket.io, namun hanya ringkasan penjelasan tentang fungsi socket.io, terimakasih banyak.
Pendahuluan
Ada pepatah mengatakan tidak kenal tidak sayang, maka sebelum mengetahui lebih lanjut Socket.io, terlebih dahulu mengenal WebSocket. Di artikel ini, hanya fokus kepada pengenalan tentang Socket.io. Dan sebelum itu kita terlebih dahulu mengerti tentang WebSocket. Untuk lebih memudahkan untuk memahami
Apa itu WebSocket ?
WebSocket (WS) adalah sebuah protokol komunikasi komputer, dikenalkan pada awal sebagai TPC-based socket API di tahun 2008. Protokol ini memungkinkan untuk berkomunikasi secara 2 arah diatas 1 koneksi TCP. WebSocket membolehan interaksi antara client dengan server secara real-time. Dengan protokol ini dapat mengirim request secara terus menerus tanpa harus membuka koneksi untuk 1 koneksi seperti protokol HTTP.
Berikut adalah perbandingan connection lifecycle antara HTTP dengan WebSocket.
Sebagai contoh sederhananya jika dibandingkan dengan protokol HTTP
- HTTP : Client hanya bisa mengirim request, dan server mengirim balik response ke client.
- WebSocket : Ketika koneksi antara client dan server terhubung, maka kedua pihak dapat saling mengirim data tanpa membuka koneksi baru, sampai koneksi tersebut putus.
Berikut beberapa kelebihan WebSocket dibandingkan menggunakan HTTP
- Koneksi 2 arah secara asynchronous, baik client maupun server dapat mengirim pesan ke masing — masing tujuan secara langsung tanpa pihak yang menerima data harus request terlebih dahulu
- Latency time yang sangat rendah
- Stream data secara real-time
Berikut aplikasi yang disarankan dibangun menggunakan koneksi WebSocket
- Game online multiplayer
- Aplikasi chatting / sosial media
- Aplikasi kolaborasi realtime
- Realtime notification
- Aplikasi berbasis lokasi realtime seperti Gojek, Grab dan sejenisnya
- Internet of Things (IoT)
- Dan aplikasi yang membutuhkan koneksi real-time tanpa melakukan pooling request (looping request dengan jeda waktu tertentu secara terus menerus)
WebSocket di Node.js
Node.js (Javascript) secara default dapat menghandle WebSocket lebih mudah dibandingkan dengan bahasa pemrograman lainnya, namun ada paket yang memudahkan untuk menggunakan WebSocket yaitu Socket.io.
Apa itu Socket.io?
Socket.io adalah real-time engine opensource yang dibangun di atas Node.js. Dengan Socket.io kita dapat berkomunikasi secara real-time, dua arah dan komunikasi berbasis event.
Socket.IO enables real-time, bidirectional and event-based communication.
It works on every platform, browser or device, focusing equally on reliability and speed. (sumber socket.io)
Dengan komunikasi berbasis event, kita tidak perlu request untuk mendapatkan data terbaru, yang perlu kita lakukan hanyalah listen / subcribe ke suatu topik. Jadi selama WebSocket tetap aktif dan listen ke suatu topik, jika terdapat data baru di topik tersebut, kita akan mendapatkan datanya secara otomatis.
Penjelasan Singkat Istilah Dasar di Socket.io
Socket.io dijadikan 2 bagian, yaitu
- Server: Backend web
- Client: Frontend web, Mobile, dll
Baik server maupun client memiliki fungsi utama dan API yang kurang lebih sama, yaitu :
- Event emitter, analogikan saja seperti orang berbicara tentang suatu hal/mengirim data dengan topik tertentu.
- Event listener, sebagai pendengar atau penerima pesan dari suatu topik, sehingga antara client dengan server dapat menerima pesan dari kedua pihak.
- Broadcast, merupakan fitur untuk mengirim data/pesan seperti event emitter, namun broadcast mengirim ke semua alamat socket yang aktif kecuali pengirimnya sendiri.
Ada fitur — fitur lain dari Socket.io yaitu namespaces dan room yang perlu kita tahu
- Namespaces, merupakan fitur untuk memisahkan ruang di dalam 1 koneksi websocket dengan menggunakan path endpoint yang berbeda, sebagai contoh example.com/ruang_tengah. Dengan fitur ini, kita dapat memiliki berbagai ruang hanya dengan 1 koneksi saja. Namescape default pada koneksi socket.io adalah ‘/’ atau base url dari koneksi Socket.io (misal example.com). Perumpaan dari namespaces adalah seperti kita membangun gedung lebih dari 1 tingkat, misal tingkat 1 untuk kantor dan tingkat 2 untuk gudang, dan yang pastinya karena 1 gedung, memiliki alamat yang sama. Dari pada membangun gedung tersediri, dimana tentunya menghabiskan resource lebih banyak, lebih baik membangun gedung tersebut secara tingkat.
- Rooms, merupakan fitur untuk membuat sebuah ruang di suatu namespaces dimana user dapat join dan leave room tersebut. Fitur ini berguna sekali untuk membangun aplikasi semisal seperti group chat, yang membutuhkan koleksi dari berbagai socket yang terhubung disuatu room. Perumpamaan room seperti seorang user yang ikut group-chat, dimana user dapat join dan leave. Jika user tersebut join maka akan mendapat notifikasi dari diskusi di group-chat tersebut.
Sumber Referensi
Comments