栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

go-socket.io 使用教程

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go-socket.io 使用教程

文章目录
    • 1、socket.io 简介
    • 2、golang实现socket.io

1、socket.io 简介

[译] socket.io官方文档

Socket.io是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5

socket.io特点
实时分析:将数据推送到客户端,这些客户端会被表示为实时计数器,图表或日志客户。
实时通信和聊天:只需几行代码便可写成一个Socket.IO的”Hello,World”聊天应用。
二进制流传输:从1.0版本开始,Socket.IO支持任何形式的二进制文件传输,例如:图片,视频,音频等。
文档合并:允许多个用户同时编辑一个文档,并且能够看到每个用户做出的修改。

2、golang实现socket.io

引用库:github.com/googollee/go-socket.io@v1.6.0

  1. 使用http 解决乱问题(使用其他可以忽略)
    http.HandleFunc("/socket.io/", func(w http.ResponseWriter, r *http.Request) {
        origin := r.Header.Get("Origin")
        log.Println("origin", origin)
        w.Header().Set("Access-Control-Allow-Origin", origin)
        w.Header().Set("Access-Control-Allow-Credentials", "true")

        server.ServeHTTP(w, r)
    })
  1. 此教程采用gin Server端
  router := gin.New()
    log.SetFlags(log.Lshortfile | log.LstdFlags)
    server := socketio.NewServer(nil)
    // redis 适配器
    ok, err := server.Adapter(&socketio.RedisAdapterOptions{
        Addr:    "127.0.0.1:6379",
        Prefix:  "socket.io",
        Network: "tcp",
    })

    fmt.Println("redis:", ok)

    if err != nil {
        log.Fatal("error:", err)
    }

    // 连接成功
    server.OnConnect("/", func(s socketio.Conn) error {
        s.SetContext("")
        // 申请一个房间
        s.Join("bcast")
        fmt.Println("连接成功:", s.ID())
        return nil
    })
    // 接收”bye“事件
    server.OnEvent("/", "bye", func(s socketio.Conn, msg string) string {
        last := s.Context().(string)
        s.Emit("bye", msg)
        fmt.Println("============>", last)
        //s.Close()
        return last
    })
    
    server.OnEvent("/chat", "msg", func(s socketio.Conn, msg string) string {
        s.SetContext(msg)
        fmt.Println("=====chat====>", msg)
        return "recv " + msg
    })
    // 连接错误
    server.OnError("/", func(s socketio.Conn, e error) {
        log.Println("连接错误:", e)

    })
    // 关闭连接
    server.OnDisconnect("/", func(s socketio.Conn, reason string) {
        log.Println("关闭连接:", reason)
    })

    go server.Serve()
    defer server.Close()

    router.Use(gin.Recovery(), Cors())
    router.GET("/socket.io/*any", gin.WrapH(server))
    router.POST("/socket.io/*any", gin.WrapH(server))
    router.StaticFS("/public", http.Dir("../asset"))

    log.Println("Serving at localhost:8000...")
    if err := router.Run(":8000"); err != nil {
        log.Fatal("failed run app: ", err)

    }
  1. web端

  
      
      
      
      WebSocket
      
  
  
      

socket.io 消息发送测试

  1. 源码

csdn源码连接
码云地址

  1. 测试截图
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号