文档章节

go语言websocket(gin-gonic+Gorilla)

吾爱
 吾爱
发布于 2017/11/30 10:04
字数 248
阅读 120
收藏 3
Go

首先使用gin创建一个http服务

package main

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

func main() {

    r := gin.Default()
    r.LoadHTMLFiles("index.html")
    r.GET("/", func(c *gin.Context) {
        c.HTML(200, "index.html", nil)
    })

    r.Run("localhost:12312")
}

使用到了一个index.html模板,用来做客户端测试websocket的,仅作为演示用

安装gorilla

go get github.com/gorilla/websocket

修改main.go

package main

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

var wsupgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

func wshandler(w http.ResponseWriter, r *http.Request) {
    conn, err := wsupgrader.Upgrade(w, r, nil)
    if err != nil {
        fmt.Println("Failed to set websocket upgrade: %+v", err)
        return
    }

    for {
        t, msg, err := conn.ReadMessage()
        if err != nil {
            break
        }
        conn.WriteMessage(t, msg)
    }
}

func main() {

    r := gin.Default()

    //websocket 请求使用 wshandler函数处理
    r.GET("/ws", func(c *gin.Context) {
        wshandler(c.Writer, c.Request)
    })    

    r.LoadHTMLFiles("index.html")
    r.GET("/", func(c *gin.Context) {
        c.HTML(200, "index.html", nil)
    })

    r.Run("localhost:12312")
}

index.html 文件

<html>
  <head>
    <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
  </head>

  <body>
    <h3>WebSocket Go</h3>
    <pre id="output"></pre>

    <script>
      url = 'ws://localhost:12312/ws';
      c = new WebSocket(url);
      
      send = function(data){
        $("#output").append((new Date())+ " ==> "+data+"\n")
        c.send(data)
      }

      c.onmessage = function(msg){
        $("#output").append((new Date())+ " <== "+msg.data+"\n")
        console.log(msg)
      }

      c.onopen = function(){
        setInterval( 
          function(){ send("ping") }
        , 1000 )
      }
    </script>

  </body>
</html>

效果图:

输入图片说明

本文转载自:http://arlimus.github.io/articles/gin.and.gorilla/

共有 人打赏支持
吾爱
粉丝 142
博文 268
码字总数 90617
作品 0
后端工程师
私信 提问
通过Websocket与gRPC交互 | gRPC双向数据流的交互控制系列(2)

在本系列第一篇文章《gRPC双向数据流的交互控制系列(1).初步实现》(https://www.jianshu.com/p/5158d6686769)中,我们完成了通过控制台进行gRPC双向数据流交互控制的实验。但是只是用控制台交...

阿狸不歌
2018/07/26
0
0
Melody —— Go 语言的微型 WebSocket 框架

Melody 是一个 Go 语言的微型 WebSocket 框架,基于 github.com/gorilla/websocket 开发,主要特性: 接口简单一用,类似 net/http 或者 Gin 提供给所有广播以及给选择连接会话广播的简单途径...

oschina
2015/05/25
61
0
WebSocket 开发模拟客户端与有游戏服务器通信

WebSocket 客户端测试功能   websocket是有标准的通信协议,在h2engine服务器引擎中继承了websocket通信协议,使用websocket通信协议的好处是很多语言或框架都内置了websocket的支持,工具...

知然
2017/09/29
0
0
实时通信技术之websocket

本文章即从4个方面带大家了解websocket: websocket是什么? 为什么需要 WebSocket ? websocket的优点与缺点? websocket的相关使用(客户端与服务器端)? websocket的相关协议与规范? 一...

一看就喷亏的小猿
2018/11/03
0
0
【转载】使用 HTML5 WebSocket 构建实时 Web 应用

作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas、本地存储、多媒体编程接口、WebSocket 等等。这其中有“Web 的 TCP ”之称的 WebSocket 格外吸引开发人员的注意。WebSo...

长平狐
2012/09/06
280
0

没有更多内容

加载失败,请刷新页面

加载更多

MaxCompute安全管理指南-案例篇

通过《MaxCompute安全管理-基础篇》了解到MaxCompute和DataWorks的相关安全模型、两个产品安全方面的关联,以及各种安全操作后,本篇主要给出一些安全管理案例,给安全管理的成员作为参考。 ...

zhaowei121
5分钟前
0
0
B站智能防挡弹幕的一种python实现

某天代码写得老眼昏花,去B站上摸鱼,突然发现奇怪的现象: 哟呵,B站竟然做了视频前景提取,把弹幕藏到画面人物的后面。识别效果还意外地不错呢。 然后又翻了下,发现这是个叫做“智能防挡弹...

crossin
12分钟前
0
0
TortoiseSVN 使用教程

TortoiseSVN 使用教程 TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。 TortoiseSVN 安装 下载地址:https://tortoisesvn.net/downloads.htm...

linjin200
15分钟前
0
0
使用应用程序(Java/Python)访问MaxCompute Lightning进行数据开发

MaxCompute Lightning是MaxCompute产品的交互式查询服务,支持以PostgreSQL协议及语法连接访问Maxcompute项目,让您使用熟悉的工具以标准 SQL查询分析MaxCompute项目中的数据,快速获取查询结...

阿里云云栖社区
17分钟前
0
0
条形码控件TBarCode SDK系列教程十二(网络应用程序问题解答)

TBarCode SDK是一款可以在任意应用程序和打印机下生成和打印所有条码的条码软件组件。TBarCode SDK对于Microsoft Office用户以及软件开发者提供条码打印。使用此款条码软件组件您可以以完美效...

ymy_666666
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部