我的客服零碎应用的 Golang+ Gin 作为后端服务,所以上面的代码是演示 demo
在 Go 语言中应用 Gin 框架实现 WebSocket 的办法如下:
装置 gin-gonic/websocket 库。
在 Gin 的路由处理函数中应用 ws.Upgrade 函数将 HTTP 连贯降级为 WebSocket 连贯。
在路由处理函数中应用 conn.ReadMessage 和 conn.WriteMessage 函数接管和发送音讯。
例如:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/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) {conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {http.NotFound(c.Writer, c.Request)
return
}
for {
// 读取音讯
_, message, err := conn.ReadMessage()
if err != nil {break}
// 发送音讯
err = conn.WriteMessage(websocket.TextMessage, message)
if err != nil {break}
}
})
r.Run()}
下面的代码中,咱们在 /ws 路由处理函数中应用 upgrader.Upgrade 函数将 HTTP 连贯降级为 WebSocket 连贯。而后,咱们应用 conn.ReadMessage 函数读取音讯,应用 conn.WriteMessage 函数发送音讯。
前端连贯 Conn 保留
咱们须要把前端链接过去的 WebSocket Conn 保留下来,这样才能够在其余中央去调用这个 Conn 发送音讯
能够应用一个全局的变量来保留前端连贯。
例如,你能够应用一个全局的 map 类型变量来保留前端连贯,这样就能够在其余中央拜访连贯了。
例如:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/websocket"
)
var upgrader = websocket.Upgrader{CheckOrigin: func(r *http.Request) bool {return true},
}
// 定义一个全局的 map 类型变量来保留前端连贯
var connections = make(map[*websocket.Conn]bool)
func main() {r := gin.Default()
r.GET("/ws", func(c *gin.Context) {conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {http.NotFound(c.Writer, c.Request)
return
}
// 将连贯保留到全局变量中
connections[conn] = true
for {
// 读取音讯
_, message, err := conn.ReadMessage()
if err != nil {delete(connections, conn)
break
}
// 发送音讯
err = conn.WriteMessage(websocket.TextMessage, message)
if err != nil {delete(connections, conn)
break
}
}
})
r.Run()}
下面的代码中,咱们在每个前端连贯建设时将连贯保留到全局变量中,在连贯断开时将连贯从全局变量中删除。
在其余中央拜访保留的前端连贯,能够应用上面的代码:
for conn := range connections {err := conn.WriteMessage(websocket.TextMessage, []byte("音讯内容"))
if err != nil {delete(connections, conn)
}
}
当然咱们 map 全局变量,须要应用一个访客 id 标识来作为 key,前面再具体阐明
惟一在线客服零碎
https://gofly.v1kf.com
十年开发教训程序员,到职全心守业中,历时三年开发出的产品《惟一客服零碎》