新增websocks服务端功能

This commit is contained in:
zyj
2025-08-30 17:41:19 +08:00
parent 1539bedc99
commit 0d43139523
3 changed files with 68 additions and 0 deletions

50
api/websocks.go Normal file
View File

@@ -0,0 +1,50 @@
package api
import (
"log"
"net/http"
"sync"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
)
type Websocks struct {
}
var clients = make(map[*websocket.Conn]bool) // 已连接的客户端
var clientsMu sync.Mutex // 保护 clients 映射的互斥锁
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true // 生产环境中应严格限制来源
},
}
func (*Websocks) Init(ctx *gin.Context) {
conn, err := upgrader.Upgrade(ctx.Writer, ctx.Request, nil)
if err != nil {
log.Printf("WebSocket 升级失败: %v", err)
ctx.JSON(http.StatusInternalServerError, gin.H{"error": "无法建立 WebSocket 连接"})
return
}
defer conn.Close()
// 将保存连接状态
clientsMu.Lock()
clients[conn] = true
clientsMu.Unlock()
log.Printf("客户端已连接: %s", conn.RemoteAddr())
for {
mt, message, err := conn.ReadMessage()
if err != nil {
log.Printf("读取错误: %v (客户端: %s)", err, conn.RemoteAddr())
break
}
log.Printf("收到来自 %s 的消息: %s", conn.RemoteAddr(), string(message))
err = conn.WriteMessage(mt, message)
if err != nil {
log.Println("write:", err)
break
}
}
}

View File

@@ -3,7 +3,9 @@ package router
import "github.com/gin-gonic/gin"
var routerTest Test
var websocks Websocks
func Init(app *gin.Engine) {
routerTest.Init(app)
websocks.Init(app)
}

16
router/websocks.go Normal file
View File

@@ -0,0 +1,16 @@
package router
import (
"go-desk-service/api"
"github.com/gin-gonic/gin"
)
type Websocks struct {
}
var apiWebsocks api.Websocks
func (*Websocks) Init(app *gin.Engine) {
app.GET("/ws", apiWebsocks.Init)
}