gin 使用gorilla 關閉 websocket 時候設置close code 和message


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 !" :


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM