使用gorilla/websocket实现Go语言WebSocket通信,首先安装依赖并创建升级器处理连接,通过wsHandler处理读写消息,主函数注册路由启动服务;前端用JavaScript建立连接测试;实现广播机制需维护客户端映射表和消息通道,将收到的消息推送给所有连接;生产环境应设置读写超时、使用锁保护共享资源、处理心跳及优雅关闭。掌握这些核心点可构建实时聊天与通知系统。

在Golang中实现WebSocket通信并不复杂,借助标准库和第三方包可以快速搭建实时双向通信服务。下面介绍如何从零开始开发一个简单的WebSocket通信项目,并汇总实战中的关键点。
使用gorilla/websocket搭建基础服务
Go语言标准库没有内置WebSocket支持,社区广泛使用gorilla/websocket包来处理WebSocket连接。先安装依赖:
go get github.com/gorilla/websocket
然后编写基础的WebSocket服务器:
立即学习“go语言免费学习笔记(深入)”;
创建一个升级HTTP连接到WebSocket的处理器:
// 定义升级器
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool { return true }, // 允许跨域
}
func wsHandler(w http.ResponseWriter, r *http.Request) {
// 升级HTTP连接
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(“升级失败:”, err)
return
}
defer conn.Close()
// 读取消息循环
for {
_, msg, err := conn.ReadMessage()
if err != nil {
break
}
log.Printf(“收到: %s”, msg)
// 回显消息
conn.WriteMessage(websocket.TextMessage, msg)
}
}
注册路由并启动服务:
func main() {
http.HandleFunc(“/ws”, wsHandler)
log.Println(“服务启动在 :8080”)
http.ListenAndServe(“:8080”, nil)
}
前端页面连接测试
写一个简单的HTML页面测试连接:
Revid AI
AI短视频生成平台
96 查看详情
const ws = new WebSocket(“ws://localhost:8080/ws”);
ws.onopen = () => {
ws.send(“Hello, Go WebSocket!”);
};
ws.onmessage = (event) => {
console.log(“回显:”, event.data);
};
打开浏览器访问该页面,可在控制台看到返回的消息,说明通信成功。
实现广播机制(群聊功能)
实际项目中常需要向多个客户端发送消息。可以用一个全局map存储连接,并在新消息到来时广播给所有人:
var clients = make(map[*websocket.Conn]bool)
var broadcast = make(chan []byte)
在handler中加入广播逻辑:
go func() {
for {
msg := <-broadcast
for client := range clients {
err := client.WriteMessage(websocket.TextMessage, msg)
if err != nil {
client.Close()
delete(clients, client)
}
}
}
}()
每个连接加入map:
clients[conn] = true
for {
_, msg, err := conn.ReadMessage()
if err != nil { break }
broadcast <- msg
}
错误处理与连接管理
生产环境中需注意连接异常、超时和资源释放:
设置读写超时:conn.SetReadDeadline(time.Now().Add(10 * time.Second))使用互斥锁保护共享map(如clients),避免并发写入panic监听关闭信号,优雅退出定期ping/pong保持连接活跃
gorilla/websocket支持ping/pong自动响应,可通过设置conn.SetPongHandler处理心跳。
基本上就这些。掌握基础通信、广播模式和连接管理后,可扩展出聊天室、实时通知等应用。关键是理解WebSocket的生命周期和Go的并发模型配合使用。
以上就是如何在Golang中开发简单的WebSocket通信_Golang WebSocket通信项目实战汇总的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1044499.html
微信扫一扫
支付宝扫一扫