gin 框架中结合 gorilla 实现 webSocket

本贴最后更新于 2403 天前,其中的信息可能已经斗转星移

gin 框架写 rest 接口特别 6,性能也很好。
本文介绍一下 gin 和 gorilla 结合创建 websocket

1. gin

github 地址:https://github.com/gin-gonic/gin

安装 gin 的代码包

go get github.com/gin-gonic/gin
package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	bindAddress := "localhost:2303"
	r := gin.Default()
	//监听 get请求  /test路径
	r.GET("/test", func(c *gin.Context) {
		c.JSON(200, []string{"123", "321"})
	})
	r.Run(bindAddress)
}

上面是个简单的 gin 请求例子,更多使用方式请查看官方介绍

2. gorilla

gorilla 拥有很多类库,这次我们使用的是它的 webSocket

go get github.com/gorilla/websocket
package main

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

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

// webSocket请求ping 返回pong
func ping(c *gin.Context) {
	//升级get请求为webSocket协议
	ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
	if err != nil {
		return
	}
	defer ws.Close()
	for {
		//读取ws中的数据
		mt, message, err := ws.ReadMessage()
		if err != nil {
			break
		}
		if string(message) == "ping" {
			message = []byte("pong")
		}
		//写入ws数据
		err = ws.WriteMessage(mt, message)
		if err != nil {
			break
		}
	}
}

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

3. js 代码

<script>
var ws = new WebSocket("ws://localhost:2303/ping");  
//连接打开时触发 
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>

4. 测试

浏览器访问 html 代码,查看浏览器调试模式中的 Console 输出

Connection open ...
Received Message: Hello WebSockets!
  • Gin
    12 引用 • 33 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1387 回帖 • 284 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 333 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...