使用%ignore_a_1%rilla/websocket库实现Golang WebSocket通信:1. 安装库并创建HTTP处理器升级连接;2. 服务端通过Upgrader升级HTTP请求,收发消息;3. 前端或Go客户端连接服务端并交互;4. 用map和互斥锁管理多个连接,实现广播。

在Golang中实现WebSocket实时通信,关键在于使用成熟的库(如gorilla/websocket)建立连接,并处理客户端与服务端之间的双向数据传输。整个过程包括升级HTTP连接、维护连接状态和收发消息。
1. 安装WebSocket库
Go语言标准库不包含原生WebSocket支持,推荐使用社区广泛使用的gorilla/websocket:
go get github.com/gorilla/websocket
2. 编写WebSocket服务端
创建一个HTTP处理器,将客户端的HTTP请求升级为WebSocket连接:
示例代码:
定义一个处理函数用于升级连接并读取消息:
package main
import (
“log”
“net/http”
“github.com/gorilla/websocket”
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool { return true }, // 允许跨域
}
func echoHandler(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, msg, err := conn.ReadMessage()
if err != nil {
log.Printf(“读取消息失败: %v”, err)
break
}
log.Printf(“收到: %s”, msg)
// 回显消息
conn.WriteMessage(msgType, msg)
}
}
func main() {
http.HandleFunc(“/ws”, echoHandler)
log.Println(“服务启动于 :8080”)
log.Fatal(http.ListenAndServe(“:8080”, nil))
}
3. 实现客户端连接
前端可用JavaScript原生WebSocket API连接Go服务端:
立即学习“go语言免费学习笔记(深入)”;
const ws = new WebSocket(“ws://localhost:8080/ws”);
ws.onopen = () => {
console.log(“已连接”);
ws.send(“Hello, Golang!”);
};
ws.onmessage = (event) => {
console.log(“收到:”, event.data);
};
ws.onclose = () => {
console.log(“连接关闭”);
};
你也可以用Go编写客户端进行测试:
conn, _, err := websocket.DefaultDialer.Dial(“ws://localhost:8080/ws”, nil)
if err != nil { /* 处理错误 */ }
defer conn.Close()
conn.WriteMessage(websocket.TextMessage, []byte(“来自Go客户端”))
, msg, := conn.ReadMessage()
fmt.Printf(“响应: %s”, msg)
4. 管理多个连接与广播消息
实际应用中常需向多个客户端广播消息。可通过维护连接池实现:
使用map和互斥锁保存所有活跃连接:
var clients = make(map[*websocket.Conn]bool)
var broadcast = make(chan []byte)
var mutex = sync.Mutex{}
// 在echoHandler中注册连接
mutex.Lock()
clients[conn] = true
mutex.Unlock()
// 单独goroutine广播消息
for {
msg := mutex.Lock()
for client := range clients {
err := client.WriteMessage(websocket.TextMessage, msg)
if err != nil {
client.Close()
delete(clients, client)
}
}
mutex.Unlock()
}
当某个客户端断开时,在读循环中删除其连接记录即可。
基本上就这些。搭建一个基础的Golang WebSocket服务并不复杂,关键是理解连接升级机制和并发处理模式。生产环境还需加入心跳检测、认证授权和错误重连等机制。
以上就是如何在Golang中使用WebSocket_Golang WebSocket实时通信方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1426937.html
微信扫一扫
支付宝扫一扫