golang轻量级WebSocket会话处理与广播插件库melody的使用
Golang轻量级WebSocket会话处理与广播插件库melody的使用
Melody是一个基于github.com/gorilla/websocket的WebSocket框架,它抽象了处理WebSocket的繁琐部分,让你可以专注于编写实时应用程序。
主要特性
- 清晰易用的接口,类似于
net/http
或Gin - 简单的方式向所有或选定的连接会话广播消息
- 消息缓冲区使并发写入安全
- 自动处理发送ping/pong心跳以超时断开的会话
- 在会话上存储数据
安装
go get github.com/olahol/melody
示例1: 聊天应用
这是一个简单的聊天服务器示例,它会将所有接收到的消息广播给所有连接的客户端。
package main
import (
"net/http"
"github.com/olahol/melody"
)
func main() {
m := melody.New() // 创建melody实例
// 处理根路径请求,返回HTML页面
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "index.html")
})
// 处理WebSocket连接请求
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)
}
示例2: Gophers应用
这个示例展示了如何跟踪连接的客户端,并在连接/断开时通知其他客户端。
package main
import (
"fmt"
"net/http"
"sync/atomic"
"github.com/olahol/melody"
)
var idCounter atomic.Int64 // 原子计数器用于生成唯一ID
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) {
id := idCounter.Add(1) // 生成唯一ID
s.Set("id", id) // 将ID存储在会话中
// 向客户端发送其ID
s.Write([]byte(fmt.Sprintf("iam %d", id)))
})
// 处理断开连接
m.HandleDisconnect(func(s *melody.Session) {
if id, ok := s.Get("id"); ok {
// 通知其他客户端该ID已断开
m.BroadcastOthers([]byte(fmt.Sprintf("dis %d", id)), s)
}
})
// 处理接收到的消息
m.HandleMessage(func(s *melody.Session, msg []byte) {
if id, ok := s.Get("id"); ok {
// 将消息广播给其他客户端,附带发送者ID
m.BroadcastOthers([]byte(fmt.Sprintf("set %d %s", id, msg)), s)
}
})
http.ListenAndServe(":5000", nil)
}
常见问题
如果尝试连接到WebSocket时遇到403
错误,可以更改允许所有来源主机:
m := melody.New()
m.Upgrader.CheckOrigin = func(r *http.Request) bool { return true }
Melody提供了一种简单而强大的方式来处理WebSocket连接,使得构建实时应用程序变得更加容易。通过上述示例,你可以快速开始使用melody来构建自己的WebSocket应用。
更多关于golang轻量级WebSocket会话处理与广播插件库melody的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复