我的客服系統使用的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
十年開發經驗程式員,離職全心創業中,歷時三年開發出的產品《唯一客服系統》
一款基于Golang+Vue開發的在線客服系統,軟體著作權編號:2021SR1462600,一套可私有化部署的網站在線客服系統,編譯后的二進制檔案可直接使用無需搭開發環境,下載zip解壓即可,僅依賴MySQL資料庫,是一個開箱即用的全渠道在線客服系統,致力于幫助廣大開發者/公司快速部署整合私有化客服功能, 開源地址:唯一客服(開源學習版) 官網地址:唯一客服官網轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/541418.html
標籤:其他
上一篇:分布式事務解決方案-后端分析
