答案:使用Golang和gorilla/websocket库可实现一个简单的WebSocket聊天室,通过HTTP服务升级连接、管理客户端并广播消息。首先安装gorilla/websocket库,创建/ws路由并用Upgrader升级为WebSocket连接,允许跨域;接着定义clients映射和broadcast通道,用RWMutex保证并发安全,在wsHandler中注册连接并读取消息发送至广播通道;然后在main函数中启动handleBroadcast协程,循环监听broadcast并将消息写入所有活跃连接,出错时关闭连接并从clients中删除;最后编写HTML页面测试,多个浏览器窗口可实时收发消息,完成基础聊天功能。

用Golang实现一个简单的WebSocket聊天室服务,核心在于使用gorilla/websocket库建立长连接,并通过广播机制让所有客户端实时收发消息。整个服务不需要前端框架,后端即可完成连接管理与消息分发。
Go语言中操作WebSocket最常用的库是gorilla/websocket。先通过以下命令安装:
然后创建一个HTTP服务,将特定路径(如/ws)升级为WebSocket连接:
代码示例:
创建main.go文件:
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()
log.Println("新客户端已连接")
// 简单回显测试
for {
_, msg, err := conn.ReadMessage()
if err != nil {
log.Printf("读取消息错误: %v", err)
break
}
log.Printf("收到消息: %s", msg)
conn.WriteMessage(websocket.TextMessage, []byte("echo: "+string(msg)))
}
}
func main() {
http.HandleFunc("/ws", wsHandler)
log.Println("服务启动在 :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
聊天室需要维护多个客户端连接。可以定义一个Client结构体和一个全局的clients集合来管理活跃连接。
立即学习“go语言免费学习笔记(深入)”;
使用map[*websocket.Conn]bool存储连接,并用互斥锁保护并发安全。
type Message struct {
Data string json:"data"
}
在wsHandler中注册新连接,并将其加入clients:
mu.Lock()
clients[conn] = true
mu.Unlock()
for {
_, msg, err := conn.ReadMessage()
if err != nil {
break
}
broadcast <- Message{Data: string(msg)}
}
mu.Lock()
delete(clients, conn)
mu.Unlock()
}
启动一个独立的广播协程,在main函数中监听broadcast通道,把接收到的消息发送给每一个当前连接的客户端。
func handleBroadcast() {
for {
msg := <-broadcast
data := []byte(msg.Data)
mu.RLock()
for conn := range clients {
err := conn.WriteMessage(websocket.TextMessage, data)
if err != nil {
log.Printf("发送失败: %v", err)
conn.Close()
mu.Lock()
delete(clients, conn)
mu.Unlock()
}
}
mu.RUnlock()
}
}
写一个简单的HTML页面测试聊天功能:
<!DOCTYPE html>打开多个浏览器窗口,输入消息点击发送,所有客户端都能实时看到内容。
基本上就这些。这个简单聊天室实现了连接管理、消息广播和基础异常处理,适合学习WebSocket通信模型。后续可扩展用户名、房间、私聊等功能。
以上就是Golang实现简单聊天室WebSocket服务的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号