gin 使用gorilla 關閉 websocket 時候設定close code 和message
阿新 • • 發佈:2022-04-15
gin 使用gorilla 時建立websocket的教程很多部落格都有寫,但是很少有人講關閉websocket時自定義 close code 和message。主要是使用:websocket.FormatCloseMessage, WriteControl 兩個方法 。可用close code 的範圍見文件:https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent#屬性。 下面給出示例:
import ( "fmt" "net/http" "sync" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" ) var ( upGrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } wsPriceOnce sync.Once ) func Test(c *gin.Context) { //升級get請求為webSocket協議 ws, err := upGrader.Upgrade(c.Writer, c.Request, nil) if err != nil { c.Writer.Write([]byte(err.Error())) return } m := map[string]interface{}{ "msg" :"ok", } er := ws.WriteJSON(m) fmt.Println(er) // 自定義關閉訊息 closeCode := 4001 message := "server closed ! " closeMessage := websocket.FormatCloseMessage(closeCode, message) deadline := time.Now().Add(time.Second) e := ws.WriteControl(websocket.CloseMessage, closeMessage, deadline) if e != nil { fmt.Println(e) } }
在postman中測試效果圖,我們看到close code 為4001, message 也是我們設定的 "server closed !" :