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

最新文章

  1. [No000071]C# 进制转换(二进制、十六进制、十进制互转)
  2. Foreach遍历
  3. Java连接Oracle数据库开发银行管理系统【三、实现篇】
  4. StackExchange.Redis--纯干货喂饱你
  5. linux TCP Wrappers
  6. miniUI datagrid 获取序号
  7. node.js笔记
  8. stm32之ADC学习
  9. Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题
  10. kvm 图形化安装
  11. J2SE基础:4.面向对象的特性一
  12. 基于VC++的网络扫描器设计与实现
  13. 小程序picker组件中的(普通选择器:mode = selector)
  14. 2014西安赛区C题
  15. Java版本知识
  16. uuid生成工具类
  17. QYH练字
  18. 脱壳_00_压缩壳_ASPACK
  19. TabHost实现通话记录界面
  20. 题解【CF103D Time to Raid Cowavans】

热门文章

  1. npm 局部安装 jbrowse
  2. 设置导航栏的title
  3. el-scrollbar滚动加载
  4. 学习lua-06,异常提示,错误处理
  5. [Err] [Dtf] 1044 - Access denied for user 'root'@'localhost' to database 'information_schema'
  6. WPF图片的缩放节省内存
  7. Biba模型(MAC)
  8. 【三维重建】Ubuntu20.04进行RealSenseD435环境配置及初步使用
  9. 普罗米修斯-docker安装
  10. PyCharm的安装使用