Skip to content

olahol/melody

Repository files navigation

melody

Build Status Codecov Go Report Card GoDoc

🎶 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 tonet/httpor 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.

Install

go get github /olahol/melody

Chat

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)
}

Gophers

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)
}

Contributors

FAQ

If you are getting a403when trying to connect to your websocket you canchange allow all origin hosts:

m:=melody.New()
m.Upgrader.CheckOrigin=func(r*http.Request)bool{returntrue}