gin 即时通信代码
时间: 2023-09-21 13:13:26 浏览: 251
以下是一个简单的使用 Gin 和 WebSocket 实现即时通信的示例代码:
```go
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"net/http"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
func main() {
r := gin.Default()
// 打开 WebSocket 连接
r.GET("/ws", func(c *gin.Context) {
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
fmt.Println("Failed to open WebSocket connection:", err)
return
}
// 循环接收客户端发送的消息
for {
_, message, err := conn.ReadMessage()
if err != nil {
fmt.Println("Failed to read message from client:", err)
conn.Close()
break
}
// 处理客户端发送的消息
fmt.Printf("Received message: %s\n", message)
// 发送消息给客户端
err = conn.WriteMessage(websocket.TextMessage, []byte("Hello, client!"))
if err != nil {
fmt.Println("Failed to send message to client:", err)
conn.Close()
break
}
}
})
// 启动服务
err := http.ListenAndServe(":8080", r)
if err != nil {
fmt.Println("Failed to start server:", err)
}
}
```
这个示例中,我们通过 Gin 框架创建了一个 HTTP 服务,其中定义了一个 WebSocket 连接的路由 `/ws`。当客户端连接到 `/ws` 路由时,服务端会升级连接为 WebSocket 连接,并通过循环读取消息和发送消息的方式实现与客户端的实时通信。
阅读全文