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

在Golang初级项目中实现WebSocket实时通信,核心是使用成熟的WebSocket库,配合标准的HTTP处理机制,建立客户端与服务端之间的双向通信通道。最常用的是gorilla/websocket库,它简单易用,文档清晰,非常适合初学者。
使用Go Modules管理依赖,在项目根目录执行:
go mod init your-project-name<br>go get github.com/gorilla/websocket
HTTP服务器不能直接处理WebSocket连接,需要将特定的HTTP请求“升级”为WebSocket协议。使用
websocket.Upgrader
示例代码:
立即学习“go语言免费学习笔记(深入)”;
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
// 允许所有跨域请求,开发阶段可用,生产环境应限制
return true
},
}定义一个处理函数,用于响应客户端的连接请求,并持续收发消息。
示例:
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
}
}
}将处理函数注册到指定路由,并启动服务器。
完整main函数示例:
func main() {
http.HandleFunc("/ws", handleWebSocket)
log.Println("服务器启动,地址: :8080")
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("启动失败: ", err)
}
}使用浏览器控制台或简单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实时通信实现的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号