gin websocket

gin 中使用websocket功能

go get github.com/gorilla/websocket

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

engine.GET("/hello", func(context *gin.Context) {
  logrus.Infof("hello websocket")

  ws, err := upgrader.Upgrade(context.Writer, context.Request, nil)
  if err != nil {
    logrus.Errorf("websocket upgrade failed with err(%v)", err)
    return
  }

  go func() {
    for {
      t, message, err := ws.ReadMessage()
      if err != nil {
        logrus.Errorf("readmessage with err(%v)", err)
        break
      }
      logrus.Infof("type[%v]", t)

      // 写回去
      ws.WriteMessage(t, message)
    }

    ws.Close()
  }()
})

对应的前端js代码

<body>
    <button id="start">开始</button>
    <button id="stop">停止</button>
    
    <script src="../bootstrap/jquery-3.6.3.js"></script>
    <script>
        var ws;
        $(function() {
            console.log("websocket test start: " + document.location.hostname);
            ws = new WebSocket("ws://" + document.location.hostname + ":55555/hello")
            ws.binaryType = "arraybuffer"

            ws.onopen = function(e) {
                console.log("opened", ws.binaryType);
            }
            ws.close = function(e) {
                console.log("closed");
            }
            ws.onmessage = function(e) {
                console.log("recv: " + e.data);
            }

            var timer;
            $('#start').click(function() {
                timer = setInterval(function() {
                    let arr = new ArrayBuffer(12);
                    let b = new Uint8Array(arr);

                    for (let i=0; i<b.length; i++) {
                        b[i] = i*i
                    }

                    ws.send(b.buffer)
                    ws.send("hello");
                }, 1000)
            })

            $('#stop').click(function() {
                clearInterval(timer);
            })
        })
    </script>
</body>

posted on   老张的巅峰  阅读(54)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示