Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/olahol/melody
:notes: Minimalist websocket framework for Go
https://github.com/olahol/melody
example framework go golang minimalist websocket websocket-framework
Last synced: about 1 month ago
JSON representation
:notes: Minimalist websocket framework for Go
- Host: GitHub
- URL: https://github.com/olahol/melody
- Owner: olahol
- License: bsd-2-clause
- Created: 2015-05-13T20:38:32.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2024-04-16T18:14:20.000Z (about 2 months ago)
- Last Synced: 2024-04-16T23:10:22.196Z (about 2 months ago)
- Topics: example, framework, go, golang, minimalist, websocket, websocket-framework
- Language: Go
- Homepage:
- Size: 986 KB
- Stars: 3,531
- Watchers: 61
- Forks: 355
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Lists
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-go-extra - melody - 05-13T20:38:32Z|2022-03-09T11:29:28Z| (Messaging / Advanced Console UIs)
- awesome-go-cn - melody
- awesome-go-zh - melody
- awesome-stars - olahol/melody - :notes: Minimalist websocket framework for Go (Go)
- awesome-gin - olahol/melody
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-stars - melody
- go-awesome - melody - WebSocket 服务框架 (开源类库 / WebSocket)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. Stars:`3.5K`. (Messaging / Search and Analytic Databases)
- awesome - olahol/melody - :notes: Minimalist websocket framework for Go (Go)
- awesome-go - melody - | - | - | (Messaging / Advanced Console UIs)
- awesome-go-cn - melody
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-go-projects - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Standard CLI)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-stars - olahol/melody - :notes: Minimalist websocket framework for Go (Go)
- awesome-go-with-framework - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- go-awesome-cn-star - melody
- awesome-trevor - Melody - minimalist websocket framework for Go (Programming / Golang)
- awesome-go-cn - melody
- zero-alloc-awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-go-cn - melody
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-go - melody
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (<span id="消息-messaging">消息 Messaging</span> / <span id="高级控制台用户界面-advanced-console-uis">高级控制台用户界面 Advanced Console UIs</span>)
- awesome-go. - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-go-cn - melody - 用于处理 websocket 会话的一个极简框架,包括广播和自动 ping/pong 处理 (消息 / 高级控制台界面)
- awesome-go-with-stars - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- repo-1316-awesome-go-cn - melody
- repo-1211-awesome-go-cn - melody
- awesome-Char - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-reader - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- Go-awesome - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-stars - melody - :notes: Minimalist websocket framework for Go (Go)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-go-stars - melody(stars: 3501) - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-go-handwritten - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-go - melody - 用於處理 websocket 會話的一個極簡框架,包括廣播和自動 ping/pong 處理 (消息 / 高級控制台界面)
- awesome-go - melody - Minimalist websocket framework for Go - ★ 1187 (Messaging)
- go-awesome - melody - WebSocket service framework (Open source library / WebSocket)
- awesome-go2 - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. - :arrow_down:34 - :star:478 (Messaging / Advanced Console UIs)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Advanced Console UIs)
- go-awesome - melody - WebSocket 服务框架 (开源类库 / WebSocket)
- awesome-go-zh - melody
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-go - melody - Minimalist framework for dealing with websocket sessions, includes broadcasting and automatic ping/pong handling. (Messaging / Search and Analytic Databases)
- awesome-go-cn - melody
- awesome-golang-repositories - melody
README
# melody
![Build Status](https://github.com/olahol/melody/actions/workflows/test.yml/badge.svg)
[![Codecov](https://img.shields.io/codecov/c/github/olahol/melody)](https://app.codecov.io/github/olahol/melody)
[![Go Report Card](https://goreportcard.com/badge/github.com/olahol/melody)](https://goreportcard.com/report/github.com/olahol/melody)
[![GoDoc](https://godoc.org/github.com/olahol/melody?status.svg)](https://godoc.org/github.com/olahol/melody)> :notes: Minimalist websocket framework for Go.
Melody is websocket framework based on [github.com/gorilla/websocket](https://github.com/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:* [x] Clear and easy interface similar to `net/http` or Gin.
* [x] A simple way to broadcast to all or selected connected sessions.
* [x] Message buffers making concurrent writing safe.
* [x] Automatic handling of sending ping/pong heartbeats that timeout broken sessions.
* [x] Store data on sessions.## Install
```bash
go get github.com/olahol/melody
```## [Example: chat](https://github.com/olahol/melody/tree/master/examples/chat)
[![Chat](https://cdn.rawgit.com/olahol/melody/master/examples/chat/demo.gif "Demo")](https://github.com/olahol/melody/tree/master/examples/chat)
```go
package mainimport (
"net/http""github.com/olahol/melody"
)func main() {
m := melody.New()http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "index.html")
})http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
m.HandleRequest(w, r)
})m.HandleMessage(func(s *melody.Session, msg []byte) {
m.Broadcast(msg)
})http.ListenAndServe(":5000", nil)
}
```## [Example: gophers](https://github.com/olahol/melody/tree/master/examples/gophers)
[![Gophers](https://cdn.rawgit.com/olahol/melody/master/examples/gophers/demo.gif "Demo")](https://github.com/olahol/melody/tree/master/examples/gophers)
```go
package mainimport (
"net/http"
"strings""github.com/google/uuid"
"github.com/olahol/melody"
)type GopherInfo struct {
ID, X, Y string
}func main() {
m := melody.New()http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "index.html")
})http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
m.HandleRequest(w, r)
})m.HandleConnect(func(s *melody.Session) {
ss, _ := m.Sessions()for _, o := range ss {
value, exists := o.Get("info")if !exists {
continue
}info := value.(*GopherInfo)
s.Write([]byte("set " + info.ID + " " + info.X + " " + info.Y))
}id := uuid.NewString()
s.Set("info", &GopherInfo{id, "0", "0"})s.Write([]byte("iam " + id))
})m.HandleDisconnect(func(s *melody.Session) {
value, exists := s.Get("info")if !exists {
return
}info := value.(*GopherInfo)
m.BroadcastOthers([]byte("dis "+info.ID), s)
})m.HandleMessage(func(s *melody.Session, msg []byte) {
p := strings.Split(string(msg), " ")
value, exists := s.Get("info")if len(p) != 2 || !exists {
return
}info := value.(*GopherInfo)
info.X = p[0]
info.Y = p[1]m.BroadcastOthers([]byte("set "+info.ID+" "+info.X+" "+info.Y), s)
})http.ListenAndServe(":5000", nil)
}
```### [More examples](https://github.com/olahol/melody/tree/master/examples)
## [Documentation](https://godoc.org/github.com/olahol/melody)
## Contributors
## FAQ
If you are getting a `403` when trying to connect to your websocket you can [change allow all origin hosts](http://godoc.org/github.com/gorilla/websocket#hdr-Origin_Considerations):
```go
m := melody.New()
m.Upgrader.CheckOrigin = func(r *http.Request) bool { return true }
```