深色模式
在 gin 中实现 WebSocket 服务
说明
gin 本身不支持 WebSocket,需要结合github.com/gorilla/websocket
库实现。
示例
使用Gin框架来实现Websocket服务的方式与标准库net/http
类似,但是需要使用Gin框架提供的WSConn类型来处理Websocket连接。下面是一个使用Gin框架实现Websocket服务的示例:
go
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
func main() {
r := gin.Default()
r.GET("/ws", func(c *gin.Context) {
// 将HTTP请求升级为Websocket连接
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
fmt.Println(err)
return
}
defer conn.Close()
// 循环读取消息
for {
_, message, err := conn.ReadMessage()
if err != nil {
fmt.Println(err)
return
}
// 打印收到的消息
fmt.Printf("Received message: %s\n", message)
// 发送响应消息
err = conn.WriteMessage(websocket.TextMessage, []byte("Hello, client!"))
if err != nil {
fmt.Println(err)
return
}
}
})
r.Run(":8080")
}
在这个示例中,我们首先使用gin.Default()函数创建一个默认的Gin引擎实例。然后,我们使用GET()方法来设置Websocket处理函数,该函数将HTTP请求升级为Websocket连接,并循环读取客户端发送的消息,并将收到的消息发送回客户端。最后,我们使用Run()函数来启动Websocket服务端,监听8080端口。