🎶 Minimalist websocket framework for Go.
Melody is websocket framework based ongithub /gorilla/websocket that abstracts away the tedious parts of handling websockets. It gets out of your way so you can write real-time apps. Features include:
- Clear and easy interface similar to
net/http
or Gin. - A simple way to broadcast to all or selected connected sessions.
- Message buffers making concurrent writing safe.
- Automatic handling of sending ping/pong heartbeats that timeout broken sessions.
- Store data on sessions.
go get github /olahol/melody
packagemain
import(
"net/http"
"github /olahol/melody"
)
funcmain() {
m:=melody.New()
http.HandleFunc("/",func(whttp.ResponseWriter,r*http.Request) {
http.ServeFile(w,r,"index.html")
})
http.HandleFunc("/ws",func(whttp.ResponseWriter,r*http.Request) {
m.HandleRequest(w,r)
})
m.HandleMessage(func(s*melody.Session,msg[]byte) {
m.Broadcast(msg)
})
http.ListenAndServe(":5000",nil)
}
packagemain
import(
"fmt"
"net/http"
"sync/atomic"
"github /olahol/melody"
)
varidCounteratomic.Int64
funcmain() {
m:=melody.New()
http.HandleFunc("/",func(whttp.ResponseWriter,r*http.Request) {
http.ServeFile(w,r,"index.html")
})
http.HandleFunc("/ws",func(whttp.ResponseWriter,r*http.Request) {
m.HandleRequest(w,r)
})
m.HandleConnect(func(s*melody.Session) {
id:=idCounter.Add(1)
s.Set("id",id)
s.Write([]byte(fmt.Sprintf("iam %d",id)))
})
m.HandleDisconnect(func(s*melody.Session) {
ifid,ok:=s.Get("id");ok{
m.BroadcastOthers([]byte(fmt.Sprintf("dis %d",id)),s)
}
})
m.HandleMessage(func(s*melody.Session,msg[]byte) {
ifid,ok:=s.Get("id");ok{
m.BroadcastOthers([]byte(fmt.Sprintf("set %d %s",id,msg)),s)
}
})
http.ListenAndServe(":5000",nil)
}
If you are getting a403
when trying to connect to your websocket you canchange allow all origin hosts:
m:=melody.New()
m.Upgrader.CheckOrigin=func(r*http.Request)bool{returntrue}