gin 框架中结合 gorilla 实现 webSocket

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

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 发布的第二款编程语言。

    498 引用 • 1395 回帖 • 256 关注
  • WebSocket

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

    48 引用 • 206 回帖 • 298 关注

相关帖子

欢迎来到这里!

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

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