在訪客進入聊天界面的時候,就要調用介面生成一個唯一ID標識 然後前端鏈接WebSocket的時候,傳遞這個訪客ID進來 如果你想在前端訪客連接時生成一個 UUID,可以使用 Go 語言的第三方庫來生成 UUID。 推薦使用 github.com/satori/go.uuid 庫。它是一個簡單易用的 ...
在訪客進入聊天界面的時候,就要調用介面生成一個唯一ID標識
然後前端鏈接WebSocket的時候,傳遞這個訪客ID進來
如果你想在前端訪客連接時生成一個 UUID,可以使用 Go 語言的第三方庫來生成 UUID。
推薦使用 github.com/satori/go.uuid 庫。它是一個簡單易用的 UUID 生成庫,支持生成常用的幾種 UUID 版本。
例如,你可以使用下麵的代碼生成一個 UUID V4:
package main import ( "fmt" "github.com/satori/go.uuid" ) func main() { u := uuid.NewV4() fmt.Printf("UUID: %s\n", u) }
在進入界面的時候,調用介面,介面中生成好訪客ID,然後帶著訪客ID GET請求鏈接WebSocket
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[string]*websocket.Conn) 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 } // 獲取訪客 ID visitorID := c.Query("visitor_id") // 將連接保存到全局變數中 connections[visitorID] = conn for { // 讀取消息 _, message, err := conn.ReadMessage() if err != nil { delete(connections, visitorID) break } // 發送消息 err = conn.WriteMessage(websocket.TextMessage, message) if err != nil { delete(connections, visitorID) break } } })
這樣就可以在程式的其他地方,拿著訪客ID去給指定的訪客發送消息,或者使用for迴圈去廣播消息
var connections = make(map[string]*websocket.Conn)