利用gorilla和gin框架實現webSocket

Gin 是用Go 編寫的一個Web 應用框架,對比其它主流的同類框架,他有更好的性能和更快的路由

安裝

go get github.com/gin-gonic/gin

gorilla, A fast, well-tested and widely used WebSocket implementation for Go.

安裝

go get github.com/gorilla/websocket

服務器端代碼(Gin參考教程:https://github.com/gin-gonic/gin#quick-start, https://www.tizi365.com/archives/244.html,gorilla教程參考https://godoc.org/github.com/gorilla/websocket

package main

import (
	"github.com/gorilla/websocket"
	"net/http"
	"github.com/gin-gonic/gin"
	"fmt"
)

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

//webSocket請求什麼什麼
func ping(c *gin.Context)  {
	//升級get請求爲websocket協議
	ws,err := upGrader.Upgrade(c.Writer, c.Request, nil)
	if err != nil {
		return
	}
	defer ws.Close()

	for {
		mt, message, err := ws.ReadMessage()
		if err != nil {
			break
		}
		fmt.Println(string(message))
		err = ws.WriteMessage(mt, message)
		if err != nil {
			break
		}

	}
}

func main()  {
	bindAddress := "127.0.0.1:8090"
	r := gin.Default()
	r.GET("/ping", ping)
	r.Run(bindAddress)
}

前端代碼(前端websocket教程參考:https://www.ruanyifeng.com/blog/2017/05/websocket.html), 打開控制檯,在控制檯,查看輸出

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    var ws = new WebSocket("ws://127.0.0.1:8090/ping");
    //連接打開時觸發
    ws.onopen = function(evt) {

        id = setInterval(function () {
            ws.send("Hello WebSockets!")
            console.log("Connection open ...");
        }, 1000)
    };
    //接收到消息時觸發
    ws.onmessage = function(evt) {

        console.log("Received Message: " + evt.data);
    };
    //連接關閉時觸發
    ws.onclose = function(evt) {
        clearInterval(id)
        console.log("Connection closed.");
    };
</script>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章