Gorilla

简介

  • web工具包
  • gorilla/context存储全局请求变量。
  • gorilla/mux是功能强大的URL路由器和调度程序。
  • gorilla/reverse为基于正则表达式的多路复用生成可逆的正则表达式。
  • gorilla/rpc使用JSON-RPC的编解码器在HTTP上实现RPC。
  • gorilla/schema将表单值转换为结构。
  • gorilla/securecookie编码和解码经过身份验证的(可选)加密的cookie值。
  • gorilla/sessions保存cookie和文件系统会话,并允许自定义会话后端。
  • gorilla/websocket实现RFC 6455中定义的WebSocket协议

websocket

  • 常用函数:
    • ws.ReadMessage()
    • ws.ReadJSON()
    • ws.WriteMessage()
    • ws.WriteJSON()
  • 示例
type Msg struct {
	A string `json:"a"`
}

var upGrader = websocket.Upgrader{
	CheckOrigin: func(r *http.Request) bool {
		return true
	},
}

//webSocket请求ping 
func ping(c *gin.Context) {
	//升级get请求为webSocket协议
	ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
	if err != nil {
		return
	}
	defer ws.Close()
	
	m := &Msg{}

	for {
		//读取ws中的数据
		err := ws.ReadJSON(&m)
		if err != nil {
			break
		}
		
		//写入ws数据
		err = ws.WriteJSON(m)

		if err != nil {
			break
		}
	}
	
}

func main() {

	r := gin.Default()
	r.GET("/ping", ping)
	r.Run(":8000")
}

参考文档