使用gorilla/websocket库实现Go语言WebSocket通信,1. 安装依赖并初始化模块;2. 配置Upgrader处理HTTP升级;3. 编写handleWebSocket函数处理消息收发;4. 通过http.HandleFunc注册/ws路由;5. 前端用new WebSocket测试连接,实现简单回显交互。

在Golang初级项目中实现WebSocket实时通信,核心是使用成熟的WebSocket库,配合标准的HTTP处理机制,建立客户端与服务端之间的双向通信通道。最常用的是gorilla/websocket库,它简单易用,文档清晰,非常适合初学者。
1. 安装WebSocket依赖库
使用Go Modules管理依赖,在项目根目录执行:
go mod init your-project-name
go get github.com/gorilla/websocket
2. 创建WebSocket升级配置
HTTP服务器不能直接处理WebSocket连接,需要将特定的HTTP请求“升级”为WebSocket协议。使用
websocket.Upgrader
完成这一过程。
示例代码:
立即学习“go语言免费学习笔记(深入)”;
var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { // 允许所有跨域请求,开发阶段可用,生产环境应限制 return true },}
3. 编写WebSocket处理函数
定义一个处理函数,用于响应客户端的连接请求,并持续收发消息。
示例:
func handleWebSocket(w http.ResponseWriter, r *http.Request) { // 升级HTTP连接为WebSocket conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Printf("升级失败: %v", err) return } defer conn.Close() // 循环读取消息 for { messageType, message, err := conn.ReadMessage() if err != nil { log.Printf("读取消息失败: %v", err) break } // 打印收到的消息 log.Printf("收到: %s", message) // 回显消息给客户端 if err := conn.WriteMessage(messageType, message); err != nil { log.Printf("发送消息失败: %v", err) break } }}
4. 启动HTTP服务器并注册路由
将处理函数注册到指定路由,并启动服务器。
完整main函数示例:
func main() { http.HandleFunc("/ws", handleWebSocket) log.Println("服务器启动,地址: :8080") err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("启动失败: ", err) }}
5. 前端测试WebSocket连接
使用浏览器控制台或简单HTML页面测试连接是否成功。
前端JavaScript示例:
const ws = new WebSocket("ws://localhost:8080/ws");ws.onopen = () => { console.log("连接已建立"); ws.send("你好,Go服务器!");};ws.onmessage = (event) => { console.log("收到消息:", event.data);};ws.onclose = () => { console.log("连接已关闭");};
运行Go服务后,打开浏览器开发者工具,粘贴上述代码,即可看到双向通信效果。
基本上就这些。对于初级项目,这种单连接回显模式足够理解WebSocket的基本流程:升级连接、读写消息、异常处理。后续可扩展为广播消息、用户管理、心跳机制等。
以上就是Golang初级项目中WebSocket实时通信实现的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1404279.html
微信扫一扫
支付宝扫一扫