go语言使用gorilla/websocket实现websocket

 更新时间:2025年04月30日 09:01:30   作者:考虑考虑  
Gorilla WebSocket 是一个用于 Go 语言的 WebSocket 协议实现,而且是一个优秀的组件库,能快速实现websocket协议,下面就跟随小编一起来看看它的具体使用吧

前言

Gorilla WebSocket 是一个用于 Go 语言的 WebSocket 协议实现,而且是一个优秀的组件库,能快速实现websocket协议

websocket实现

依赖安装

使用以下依赖安装对应的库

go get github.com/gorilla/websocket

程序实现

package main

import (
    "fmt"
    "github.com/gorilla/websocket"
    "log"
    "net/http"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  4196,
    WriteBufferSize: 1124,
    CheckOrigin: func(r *http.Request) bool {

       //if r.Method != "GET" {
       // fmt.Println("method is not GET")
       // return false
       //}
       //if r.URL.Path != "/ws" {
       // fmt.Println("path error")
       // return false
       //}
       return true
    },
}

var m map[string]*websocket.Conn

// ServerHTTP 用于升级协议
func ServerHTTP(w http.ResponseWriter, r *http.Request) {
    // 收到http请求之后升级协议
    conn1, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
       log.Println("Error during connection upgrade:", err)
       return
    }
    userId := r.FormValue("userId")
    log.Println("userId:" + userId)
    defer conn1.Close()
    m[userId] = conn1

    conn := m[userId]

    for {
       // 服务端读取客户端请求
       messageType, message, err := conn.ReadMessage()
       if err != nil {
          log.Println("Error during message reading:", err)
          break
       }
       log.Printf("Received:%s", message)

       // 开启关闭连接监听
       conn.SetCloseHandler(func(code int, text string) error {
          fmt.Println(code, text) // 断开连接时将打印code和text
          return nil
       })

       //服务端给客户端返回请求
       err = conn.WriteMessage(messageType, message)
       conn.WriteMessage(websocket.TextMessage, []byte("aaa"))
       if err != nil {
          log.Println("Error during message writing:", err)
          return
       }

    }
}

func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Index Page")
}

func main() {
    //a, _ := strconv.Atoi("1")
    //fmt.Println(a)

    m = make(map[string]*websocket.Conn)

    // 创建HTTP服务器
    http.HandleFunc("/ws", ServerHTTP)
    log.Println("Server started on :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

启动之后

使用postman连接服务端

发送消息

总结

Gorilla WebSocket 提供了一个完整且经过测试的 WebSocket 协议实现,适用于构建高效的 WebSocket 应用程序

到此这篇关于go语言使用gorilla/websocket实现websocket的文章就介绍到这了,更多相关go websocket内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入了解Go语言中web框架的中间件运行机制

    深入了解Go语言中web框架的中间件运行机制

    大家在使用iris框架搭建web系统时,一定会用到中间件。那么你了解中间件的运行机制吗?你知道为什么在iris和gin框架的请求处理函数中要加c.Next()函数吗?本文就和大家一起探究该问题的答案
    2023-02-02
  • 让goland支持proto文件类型的实现

    让goland支持proto文件类型的实现

    这篇文章主要介绍了让goland支持proto文件类型的实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 关于Go你不得不知道的一些实用小技巧

    关于Go你不得不知道的一些实用小技巧

    开发语言上Go成为高并发业务开发的主流语言,再加上云原生技术底座的驱动,Go语言风光无限,下面这篇文章主要给大家介绍了关于Go你不得不知道的一些实用小技巧,需要的朋友可以参考下
    2022-11-11
  • go语言切片slice使用细节和注意事项整理大全

    go语言切片slice使用细节和注意事项整理大全

    这篇文章主要给大家介绍了关于go语言切片slice使用细节和注意事项整理的相关资料,需要的朋友可以参考下
    2024-05-05
  • 简单聊聊Go语言中空结构体和空字符串的特殊之处

    简单聊聊Go语言中空结构体和空字符串的特殊之处

    在日常的编程过程中,大家应该经常能遇到各种”空“吧,比如空指针、空结构体、空字符串等,本文就以 Go 语言为例,一起来看看空结构体和空字符串在 Go 语言中的特殊之处吧
    2024-03-03
  • go语言实现mqtt协议的实践

    go语言实现mqtt协议的实践

    MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。本文主要介绍了go语言实现mqtt协议的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Goland debug失效详细解决步骤(合集)

    Goland debug失效详细解决步骤(合集)

    今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这里总结几种Goland debug失效常见情况,需要的朋友可以参考下
    2025-02-02
  • Golang使用archive/zip包实现ZIP压缩与解压

    Golang使用archive/zip包实现ZIP压缩与解压

    Golang 中的 archive/zip 包用于处理 ZIP 格式的压缩文件,提供了一系列用于创建、读取和解压缩 ZIP 格式文件的函数和类型,使用起来非常方便,下面就跟随小编一起了解一下具体使用方法吧
    2023-08-08
  • 详解golang中发送http请求的几种常见情况

    详解golang中发送http请求的几种常见情况

    这篇文章主要介绍了详解golang中发送http请求的几种常见情况,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 简单聊聊Go语言的注释

    简单聊聊Go语言的注释

    这篇文章主要介绍了简单聊聊Go语言的注释的相关资料,需要的朋友可以参考下
    2023-08-08

最新评论