我的客服零碎应用的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

十年开发教训程序员,到职全心守业中,历时三年开发出的产品《惟一客服零碎》