首页 > 后端开发 > Golang > 正文

如何使用Golang实现简单的WebSocket Server_GolangWebSocket Server通信说明

P粉602998670
发布: 2025-12-18 17:47:02
原创
435人浏览过
用Golang实现WebSocket服务需借助gorilla/websocket库,通过upgrader.Upgrade()升级HTTP连接,用goroutine读写消息,维护线程安全的连接池,妥善处理错误与心跳,确保连接生命周期管理健壮。

如何使用golang实现简单的websocket server_golangwebsocket server通信说明

用 Golang 实现一个简单的 WebSocket 服务并不复杂,核心是借助 gorilla/websocket 这个广泛使用的第三方库——它稳定、文档清晰、社区支持好,比标准库更直接易用。

安装依赖并初始化 WebSocket 连接处理

先通过 go mod 管理依赖:

go mod init example.com/ws-server
go get github.com/gorilla/websocket

然后定义 HTTP handler,把升级 WebSocket 请求的逻辑封装进去。关键点是:不能直接用 http.ResponseWriter 写响应,必须用 upgrader.Upgrade() 把连接“升格”为 WebSocket 连接。

常见写法示例:

立即学习go语言免费学习笔记(深入)”;

  • 定义全局 upgrader,设置允许跨域(开发时常用):
    var upgrader = websocket.Upgrader{CheckOrigin: func(r *http.Request) bool { return true }}
  • 在 handler 中调用 upgrader.Upgrade(w, r, nil),成功后得到 *websocket.Conn 实例,后续收发消息都靠它

接收和广播消息(基础通信逻辑)

每个连接对应一个 goroutine,持续读取消息;服务端可维护一个连接池(比如用 map[*websocket.Conn]bool),配合互斥锁安全增删。

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 193
查看详情 Find JSON Path Online

典型结构:

  • 客户端发来消息 → 调用 conn.ReadMessage() 获取 messageType, data []byte
  • 简单回传:直接 conn.WriteMessage(messageType, data)
  • 广播给所有人:遍历连接池,对每个 conn 调用 WriteMessage(注意加锁读 map,且需检查 conn 是否已关闭)
  • 建议统一用 TextMessage 类型,避免二进制解析复杂度

处理连接生命周期与错误退出

WebSocket 连接不是永久的,网络抖动、页面关闭、心跳超时都会导致断连。不能忽略错误,否则 goroutine 泄漏。

关键做法:

  • ReadMessageWriteMessage 都可能返回 error,最常见的是 websocket.CloseMessageio.EOF,此时应主动 conn.Close() 并从连接池中移除
  • 给每个连接启动两个 goroutine:一个读,一个写(尤其广播场景下,避免写阻塞读)
  • 可选加 ping/pong 心跳:设置 conn.SetPingHandler()conn.SetPongHandler(),定期调用 conn.WriteMessage(websocket.PingMessage, nil)

前端简单测试连接(验证通路)

不用框架,纯 HTML + JS 就能快速验证服务是否跑通:

<script><br>
const ws = new WebSocket("ws://localhost:8080/ws");<br>
ws.onopen = () => ws.send("Hello from browser");<br>
ws.onmessage = e => console.log("Received:", e.data);<br>
</script>
登录后复制

只要控制台打出 "Received: Hello from browser",说明握手成功、双向通信正常。后续可扩展 JSON 消息格式、用户标识、房间分组等。

基本上就这些。不复杂但容易忽略错误处理和并发安全——把连接管理、读写分离、异常清理做扎实,一个健壮的基础 WebSocket 服务就出来了。

以上就是如何使用Golang实现简单的WebSocket Server_GolangWebSocket Server通信说明的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号