新闻中心

Golang如何使用WebSocket发送消息_Golang WebSocket消息发送方法

2025-11-27
浏览次数:
返回列表
使用gorilla/websocket库可实现在Go中发送WebSocket消息。1. 通过go get github.com/gorilla/websocket安装库;2. 使用websocket.DefaultDialer.Dial建立连接;3. 调用conn.WriteMessage发送文本或二进制消息;4. 服务端用websocket.Upgrader升级HTTP连接并处理读写;5. 建议封装心跳与重连机制提升稳定性。

golang如何使用websocket发送消息_golang websocket消息发送方法

在Go语言中使用WebSocket发送消息,通常借助第三方库gorilla/websocket,它是目前最流行且稳定的WebSocket实现。下面介绍如何建立连接并发送消息。

1. 安装 gorilla/websocket 库

在项目中引入该库:

go get github.com/gorilla/websocket

2. 建立WebSocket连接并发送消息

以下是一个简单的客户端示例,连接到WebSocket服务器并发送一条文本消息:

package main

import (
    "fmt"
    "log"
    "net/url"
    "os"

    "github.com/gorilla/websocket"
)

func main() {
    // WebSocket服务器地址
    u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/echo"}
    log.Printf("连接到 %s", u.String())

    // 建立连接
    conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
    if err != nil {
        log.Fatal("连接失败:", err)
    }
    defer conn.Close()

    // 发送消息
    message := "Hello, WebSocket Server!"
    err = conn.WriteMessage(websocket.TextMessage, []byte(message))
    if err != nil {
        log.Println("发送消息失败:", err)
        return
    }

    fmt.Println("已发送消息:", message)

    // 可选:接收回显消息
    _, received, err := conn.ReadMessage()
    if err != nil {
        log.Println("读取消息失败:", err)
    } else {
        fmt.Println("收到回复:", string(received))
    }
}

3. 服务端接收并响应消息

一个简单服务端用于接收客户端消息并回显:

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    CheckOrigin: func(r *http.Request) bool { return true }, // 允许跨域
}

func echoHandler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Print("升级失败:", err)
        return
    }
    defer conn.Close()

    for {
        messageType, p, err := conn.ReadMessage()
        if err != nil {
            log.Println("读取失败:", err)
            break
        }

        // 回显收到的消息
        if err := conn.WriteMessage(messageType, p); err != nil {
            log.Println("发送失败:", err)
            break
        }
    }
}

func main() {
    http.HandleFunc("/echo", echoHandler)
    log.Println("服务启动在 :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

4. 消息类型说明

WebSocket支持多种消息类型:
  • websocket.TextMessage:文本消息,内容为UTF-8编码字符串
  • websocket.BinaryMessage:二进制消息,适合传输字节流(如图片、协议数据)
发送时选择合适类型:

conn.WriteMessage(websocket.TextMessage, []byte("文本"))
conn.WriteMessage(websocket.BinaryMessage, []byte{0x01, 0x02, 0x03})

Motiff妙多 Motiff妙多

Motiff妙多是一款AI驱动的界面设计工具,定位为“AI时代设计工具”

Motiff妙多 334 查看详情 Motiff妙多

基本上就这些。只要建立好连接,调用 WriteMessage 即可发送消息。实际项目中建议封装连接管理、心跳机制和错误重连逻辑来提升稳定性。

以上就是Golang如何使用WebSocket发送消息_Golang WebSocket消息发送方法的详细内容,更多请关注其它相关文章!


# 内网  # 百度全网关键词排名  # seo推广外包费用高吗  # 台湾知名网站建设案例  # 重庆市网站推广怎么收费  # 杭州网络推广营销方案  # 西宁软件优化网站建设  # 福田免费的网站推广方案  # 网站推广包括什么类型  # 北京seo技能培训  # 青海网站建设详细策划  # 它是  # 是一个  # 访问权限  # 客户端  # git  # 何为  # 连接到  # 服务端  # 如何使用  # 发送消息  # 跨域  # ai  # websocket  # 字节  # 编码  # go语言  # golang  # github  # go 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法  css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异  c++ 命名空间怎么用 c++ namespace使用指南  Selenium Python中处理点击后新窗口加载冻结问题的策略与实践  必由学在线入口 必由学网页版快速登录入口  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  Pygame教程:解决用户输入与游戏状态更新不同步问题  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  Python实时数据流中的动态最值查找策略  使用 Pandas 高效处理 .dat 文件:字符清理与数据计算  Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】  拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法  如何在J*a中使用Locale处理多语言环境  Django模型中自动计算可用余额的实现方法  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  在python-socketio事件处理器中安全访问Flask应用上下文  红果短剧网页版官网入口 官方最新网址发布  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  照顾宝贝2小游戏点击立即在线玩  在哪找SublimeJ远程工具_SFTP插件配置教程  sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程  mysql备份恢复性能优化_mysql备份恢复性能优化方法  composer的"require-dev"部分是用来做什么的?  C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器  J*aScript map 方法中处理循环元素为空数组的策略  Bing引擎入口最新2025 Bing搜索免费官方登录  如何在 Excel Online 和 Google 表格中更改日期格式  汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口  修复二维数组索引越界异常:一维循环到二维坐标的正确映射  Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】  千牛数据看板网页版_千牛数据看板网页版访问方法  Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值  J*aScript:在map操作中高效处理空数组  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题  Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】  漫蛙官网正版漫画入口 漫蛙2官方网页登录地址  Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示  快手赚钱渠道_快手收益来源  大麦的“候补”是什么意思 大麦候补购票规则【详解】  响应式容器内容自动缩放与宽高比维持教程  整合Supabase认证与Django模型:跨模式迁移的解决方案  我的世界官方游戏入口 我的世界官网平台直达链接  蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接  抓大鹅无需下载版 抓大鹅秒玩版入口  绝地鸭卫平a核爆刀流玩法攻略  快速CSGO开箱网站指南 CSGO开箱平台推荐  Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  漫蛙漫画登录站点 漫蛙2正版漫画快速访问 

搜索