Go语言通过gorilla/websocket库实现WebSocket通信,首先使用go get安装依赖,然后创建Upgrader实例将HTTP连接升级为WebSocket,示例代码展示了服务端接收并回显消息的过程,客户端可用JavaScript测试连接,关键点包括允许跨域、读写消息及连接关闭,适用于实时通信场景。

Go语言实现WebSocket通信主要依赖第三方库 gorilla/websocket,这是目前最常用且稳定的选择。下面介绍如何用Golang搭建一个简单的WebSocket服务端,完成数据的接收与发送。
go get github.com/gorilla/websocket
使用 gorilla/websocket 提供的 Upgrader 将HTTP连接升级为WebSocket连接。
示例代码:
本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。
466
立即学习“go语言免费学习笔记(深入)”;
package main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true // 允许跨域连接,生产环境应做更严格校验
},
}
func wsHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Printf("升级失败: %v", err)
return
}
defer conn.Close()
// 循环读取消息
for {
msgType, message, err := conn.ReadMessage()
if err != nil {
log.Printf("读取失败: %v", err)
break
}
log.Printf("收到消息: %s", message)
// 回显消息
if err := conn.WriteMessage(msgType, message); err != nil {
log.Printf("发送失败: %v", err)
break
}
}
}
func main() {
http.HandleFunc("/ws", wsHandler)
log.Println("服务器启动,地址: :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
可以用浏览器控制台测试连接:
const ws = new WebSocket("ws://localhost:8080/ws");
ws.onopen = () => {
ws.send("你好,Golang WebSocket!");
};
ws.onmessage = (event) => {
console.log("收到:", event.data);
};
ws.onclose = () => {
console.log("连接关闭");
};
基本上就这些。通过 gorilla/websocket 可以轻松实现全双工通信,适合实时聊天、通知推送等场景。不复杂但容易忽略错误处理和连接管理,建议结合 context 或 hub 模式做更完善的控制。
以上就是Golang如何实现WebSocket数据收发的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号