Kloning repositori ini
Pasang repositori & jalankan perintah ini untuk menginstal dependensi
make setup
make run
localhost:8080 Setelah menjalankan server, buka klien Websocket Anda. Jika Anda tidak memilikinya, coba ekstensi Websocket King untuk Chrome.
Sambungkan ke ws://localhost:8080/socket , Anda akan disambut oleh server.
Server: Welcome! Your ID is f0ab664a-5af3-4f8d-8afe-eb93085267e4
{
"action": "subscribe",
"topic": "world"
}
{
"action": "publish",
"topic": "world",
"message": "Hello world!"
}
{
"action": "unsubscribe",
"topic": "world"
}
Anda mungkin bertanya "mengapa saya harus menggunakan WebSocket alih -alih REST API"?
REST API menggunakan HTTP yang hanya dapat mengirim respons sekali per permintaan.
Sementara itu, Websocket dapat digunakan untuk komunikasi dua arah yang persisten tanpa perlu membangun kembali koneksi setiap kali.
Ini bisa berguna dalam beberapa skenario seperti mengobrol atau pub-sub.
Berikut adalah diagram untuk memvisualisasikan perbedaan antara HTTP dan Websocket.

Flowchart ini menjelaskan cara kerja server ini. 
cmd
└── main
└── main.go
internal
└── websocket
└── handler.go
└── model.go
└── server.go
Main.go : File utama yang akan dieksekusi.
Handler.go : Menangani koneksi terbuka/tutup & lewati pesan ke server.
Model.go : Menyimpan model yang digunakan oleh server.
Server.go : Menjalankan tindakan spesifik sesuai dengan pesan klien, juga berisi fungsi yang diperlukan oleh server agar berfungsi dengan baik sebagai server WebSocket.
Repositori ini jauh dari ideal. Itu hanya bukti konsep.
Meskipun repositori ini dekat dengan pub-sub, masih dapat digunakan untuk server obrolan.
Misalnya, kami dapat menambahkan fungsi pada soket yang terhubung sehingga klien akan secara otomatis berlangganan ID mereka sendiri sebagai topik. Klien lain kemudian akan menggunakan ID pengguna tersebut sebagai topik untuk menerbitkan pesan.
Saya telah mencoba membangun solusi seperti itu dikombinasikan dengan otorisasi untuk mencegah pengguna lain berlangganan ID orang lain dan itu berhasil.
Repositori ini terinspirasi oleh Golang-Pubsub oleh @tabvn