在Go中,可以使用gin和melody库来搭建一个轻量级的WebSocket服务。gin是一个流行的Web框架,而melody是一个用于处理WebSocket的库。以下是一个简单的示例代码,演示了如何使用gin和melody搭建WebSocket服务:
go
package main
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"github.com/olahol/melody"
)
func main() {
r := gin.Default()
// 创建Melody实例
m := melody.New()
// 注册WebSocket处理函数
r.GET("/ws", func(c *gin.Context) {
err := m.HandleRequest(c.Writer, c.Request)
if err != nil {
fmt.Println(err)
}
})
// 处理WebSocket连接
m.HandleConnect(func(s *melody.Session) {
fmt.Println("WebSocket connected")
})
// 处理WebSocket消息
m.HandleMessage(func(s *melody.Session, msg []byte) {
fmt.Println("Received message:", string(msg))
// 发送消息给所有连接的客户端
m.Broadcast(msg)
})
// 处理WebSocket断开连接
m.HandleDisconnect(func(s *melody.Session) {
fmt.Println("WebSocket disconnected")
})
// 启动HTTP服务器
fmt.Println("WebSocket server listening on :8080")
http.ListenAndServe(":8080", r)
}
在上面的示例中,我们首先创建了一个gin的Engine实例,并创建了一个melody的Melody实例。
然后,我们使用r.GET方法将/ws路径注册为WebSocket处理函数。在处理函数中,我们使用m.HandleRequest方法来处理WebSocket连接。
接下来,我们使用m.HandleConnect方法处理WebSocket连接事件,使用m.HandleMessage方法处理WebSocket消息事件,使用m.HandleDisconnect方法处理WebSocket断开连接事件。
在HandleMessage方法中,我们打印接收到的消息,并使用m.Broadcast方法将消息广播给所有连接的客户端。
最后,我们使用http.ListenAndServe函数启动HTTP服务器,监听在8080端口上。
melody官网的示例代码
go
package main
import (
"github.com/gin-gonic/gin"
"github.com/olahol/melody"
"net/http"
)
func main() {
r := gin.Default()
m := melody.New()
r.GET("/", func(c *gin.Context) {
http.ServeFile(c.Writer, c.Request, "index.html")
})
r.GET("/ws", func(c *gin.Context) {
m.HandleRequest(c.Writer, c.Request)
})
m.HandleMessage(func(s *melody.Session, msg []byte) {
m.Broadcast(msg)
})
r.Run(":5000")
}
请注意,上述示例中使用了gin和melody库,你需要在项目中导入这两个库,可以使用以下命令进行安装:
go get github.com/gin-gonic/gin
go get github.com/olahol/melody
以上是一个简单的示例,你可以根据具体的需求进行调整和扩展。