Teknologi

Menjelajahi Protokol Chat Go Berusia 10 Tahun

Ringkasan

  • Seorang pengembang berhasil menghidupkan kembali proyek Go berusia satu dekade, menemukan bug tersembunyi, dan menyoroti pentingnya eksplorasi kode lama bagi komunitas teknologi.

Seorang pengembang, Maneshwar, menghabiskan akhir pekan-nya tidak dengan cara yang biasa. Alih-alih beristirahat, ia justru menjelajahi repositori GitHub lama untuk mencari proyek yang terlupakan. Hasilnya adalah penemuan **lhttp**, sebuah protokol mirip HTTP yang menggunakan WebSocket untuk membangun layanan pesan instan yang skalabel tanpa perlu XMPP. Dalam tulisan ini, kita akan membahas bagaimana ia berhasil menghidupkan kembali kode Go berusia satu dekade, mengungkap bug tersembunyi, dan mengapa eksplorasi semacam ini tetap relevan bagi komunitas teknologi di Indonesia.

Lhttp menggambarkan dirinya sebagai "protokol mirip HTTP yang menggunakan WebSocket untuk menyediakan koneksi jangka panjang dan memungkinkan Anda membangun layanan IM yang skalabel dengan cepat tanpa XMPP." Pada dasarnya, ini adalah protokol teks kecil yang mengikuti gaya HTTP—perintah, header, dan body—tetapi berjalan di atas koneksi WebSocket, bukan socket TCP mentah. Hal ini memungkinkan server untuk mendorong pesan ke klien tanpa menunggu permintaan eksplisit. Untuk mendukung skalabilitas, server-server lhttp berkomunikasi satu sama lain melalui **NATS**, sebuah broker pesan ringan yang masih menggunakan salinan kuno dari `gnatsd`. Setiap server berlangganan ke bus pesan yang sama, sehingga klien di server mana pun dapat menerima pesan yang diterbitkan di server lain.

Secara teknis, protokol ini sangat sederhana: `LHTTP/1.0 chat content-type:json publish:channel_jack {"to":"jack","message":"hello jack"}`. Permintaan dan respons mengikuti pola HTTP klasik yang sudah dikenal oleh para pengembang yang pernah bereksperimen dengan telnet. Ketika Maneshwar mencoba membangun kembali proyek ini, tantangan utama adalah ekosistem pengembangan Go yang sudah sangat berbeda. Repositori ini menggunakan Godeps dan direktori vendor yang diperbarui pada tahun 2016, dengan deklarasi `GoVersion: "go1.6"`. Meskipun ia memiliki Go 1.24, proses kompilasi berjalan lancar dengan mengatur `GO111MODULE=off` dan menggunakan GOPATH lama. Baik server chat maupun server demo yang menyajikan antarmuka pengguna berhasil dikompilasi tanpa perubahan kode.

Setelah proses berjalan (`gnatsd`, `lhttp_server`, dan `demo_server`), ia langsung menguji protokol ini menggunakan koneksi WebSocket mentah dalam Python. Ia mengirim pesan teks biasa dan menerima respons yang secara aneh diberi label sebagai `content-type:image/png`. Bug ini, yang tampaknya merupakan sisa-sisa debugging, menunjukkan bahwa demo tersebut tidak sepenuhnya bebas dari kesalahan. Namun, mekanisme pub/sub berfungsi dengan baik: klien yang berlangganan ke sebuah saluran dapat menerima pesan yang diterbitkan oleh klien lain di server yang berbeda tanpa masalah.

Bug yang lebih menarik muncul ketika menggunakan antarmuka chat yang sebenarnya. Dua klien yang berlangganan ke saluran yang sama menerima pesan yang berbeda: satu klien menerima pesan asli beserta label yang salah, sementara klien lainnya menerima pesan yang benar. Hal ini menunjukkan bahwa implementasi chat demo mungkin secara tidak sengaja mengirim pesan kembali ke pengirim, sebuah masalah yang dapat berdampak pada keandalan aplikasi obrolan apa pun yang menggunakan logika serupa.

Eksplorasi ini memberikan beberapa pelajaran berharga. Pertama, menghidupkan kembali kode lama adalah latihan yang bermanfaat untuk memahami dependensi dan praktik pengembangan di masa lalu. Kedua, bahkan proyek-proyek kecil dapat mengandung bug tersembunyi yang hanya dapat ditemukan melalui pengujian langsung. Ketiga, bagi para pengembang di Indonesia yang sering bekerja dengan sumber daya terbatas, mempelajari proyek-proyek open-source lama dapat memberikan wawasan tentang teknik efisien dan solusi skalabel yang tidak selalu memerlukan teknologi terbaru.

Secara keseluruhan, petualangan ini menunjukkan bahwa keingintahuan dan metode debugging yang sistematis dapat mengubah proyek yang terlupakan menjadi sumber pengetahuan. Bagi komunitas teknologi di Indonesia, hal ini merupakan pengingat bahwa keterampilan untuk memahami, memelihara, dan meningkatkan kode lama sama pentingnya dengan mengadopsi alat dan kerangka kerja terbaru.

Mengapa Ini Penting

Artikel ini menunjukkan bahwa kode lama masih dapat dieksploitasi dan mengandung pelajaran berharga tentang ketahanan, debugging, dan skalabilitas. Bagi para pengembang di Indonesia, hal ini merupakan sumber inspirasi untuk tidak mengabaikan warisan perangkat lunak dan mendorong budaya eksperimen langsung yang dapat meningkatkan keterampilan pemecahan masalah. Selain itu, dengan menyoroti penggunaan protokol ringan seperti WebSocket dan NATS, artikel ini juga memperkenalkan alternatif yang hemat sumber daya bagi startup yang bertujuan untuk membangun layanan pesan dengan anggaran terbatas.

Sumber Asli
Dev.to
Tanggal
12 Juli 2026
Waktu Baca
4 menit