我的客服零碎应用的Golang+ Gin作为后端服务,所以上面的代码是演示demo
在 Go 语言中应用 Gin 框架实现 WebSocket 的办法如下:
装置 gin-gonic/websocket 库。
在 Gin 的路由处理函数中应用 ws.Upgrade 函数将 HTTP 连贯降级为 WebSocket 连贯。
在路由处理函数中应用 conn.ReadMessage 和 conn.WriteMessage 函数接管和发送音讯。
例如:
package mainimport ( "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 mainimport ( "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
十年开发教训程序员,到职全心守业中,历时三年开发出的产品《惟一客服零碎》