golang-gin-websocket问题
接口全览
//聊一聊接口func Handler(c *gin.Context) {fmt.Println("进入函数")//获取发送者uid和被发送者uidtoken := module.WsGetTokenFromHeader(c.Request.Header)fmt.Println(token)stuNum := dao.Redis.Get(token).Val()toStuNum := c.Query("toStuNum")if stuNum == toStuNum {c.JSON(http.StatusOK, gin.H{"status": 203,"msg": "自己无法与自己建立沟通",})return}//升级websocket协议conn, err := (&websocket.Upgrader{CheckOrigin: func(r *http.Request) bool {return true},//将获取的参数放进这个数组Subprotocols: []string{token},}).Upgrade(c.Writer, c.Request, nil) //升级ws协议if err != nil {http.NotFound(c.Writer, c.Request)return}//创建一个用户实例client := &models.Client{ID: createID(stuNum, toStuNum), //1->2SendID:createID(toStuNum, stuNum), //2->1FromUsername: stuNum,ToUsername: toStuNum,Socket:conn,Send: make(chan []byte),}//用户注册到用户管理上mux.Lock()models.Manager.Register <- clientmux.Unlock()go client.Read()go client.Write()go models.BatchRead(toStuNum, stuNum)}
接口切片
如果前端使用Sec-WebSocket-Protocol字段传递token的话会引发websocket刚连接上就断开的问题
届时需要在Upgrader添加
//将获取的参数放进这个数组Subprotocols: []string{token},
以建立连接
websocket升级
conn, err := (&websocket.Upgrader{CheckOrigin: func(r *http.Request) bool {return true},//将获取的参数放进这个数组Subprotocols: []string{token},}).Upgrade(c.Writer, c.Request, nil) //升级ws协议if err != nil {http.NotFound(c.Writer, c.Request)return}
开发者涨薪指南
48位大咖的思考法则、工作方式、逻辑体系