Go+Gin做一个WebSocket,(Ginlaravel演示)

安装扩展:

go get github.com/gorilla/websocket

制作路由:

route *gin.Engine

route.Any("/api/example/socket/ping1", WebSocket.Ping1)

控制器代码:

package WebSocket

import (
	"ginvel.com/app/Common"
	"github.com/gin-gonic/gin"
	"github.com/gorilla/websocket"
	"net/http"
	"time"
)

// WebSocket参数
var upGrader = websocket.Upgrader{
	ReadBufferSize:   1024,
	WriteBufferSize:  1024,
	HandshakeTimeout: 5 * time.Second,
	CheckOrigin: func(r *http.Request) bool { // 取消ws跨域校验
		return true
	},
}

// Ping1 处理WebSocket消息
// ws:// wss://
func Ping1(ctx *gin.Context)  {
	//升级get请求为webSocket协议
	ws, err := upGrader.Upgrade(ctx.Writer, ctx.Request, nil)
	if err != nil {
		return
	}
	defer ws.Close()
	for { // 防止gin通过协程调用该handler函数,一旦退出函数,ws会被主动销毁

		// 读取数据
		mt, msg, err := ws.ReadMessage()
		if err != nil {
			break
		}

		// 处理消息
		newMsg1 := string(msg) + "@date1=" + Common.GetTimeDate("YmdHis")
		msg = []byte(newMsg1)

		// 写入(发送)ws数据
		err = ws.WriteMessage(mt, msg)
		if err != nil {
			break
		}

		time.Sleep(3 * time.Second)

		newMsg2 := string(msg) + "@date2=" + Common.GetTimeDate("YmdHis")
		msg = []byte(newMsg2)

		err = ws.WriteMessage(mt, msg)
		if err != nil {
			break
		}

		time.Sleep(3 * time.Second)

		newMsg3 := string(msg) + "@date3=" + Common.GetTimeDate("YmdHis")
		msg = []byte(newMsg3)

		err = ws.WriteMessage(mt, msg)
		if err != nil {
			break
		}

	}
}

web代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    let ws = new WebSocket("ws://127.0.0.1:8090/api/example/socket/ping1");
    //连接打开时触发
    ws.onopen = function(evt) {
        console.log("Connection open ...");
        ws.send("Hello WebSockets!");
    };
    //接收到消息时触发
    ws.onmessage = function(evt) {
        console.log("Received Message: " + evt.data);
    };
    //连接关闭时触发
    ws.onclose = function(evt) {
        console.log("Connection closed.");
    };

</script>
</body>
</html>

运行:

-

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值