如何使用Golang进行WebSocket通信

如何使用golang进行websocket通信

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适用于实时数据传输场景,比如聊天应用、实时通知等。Golang 通过第三方库 gorilla/websocket 提供了对 WebSocket 的良好支持。下面介绍如何使用 Golang 实现 WebSocket 通信。

1. 安装 gorilla/websocket 库

在项目中引入 gorilla/websocket:

go get github.com/gorilla/websocket

这是目前最常用的 Go WebSocket 实现库,功能稳定且文档完善。

2. 创建 WebSocket 服务端

以下是一个简单的 WebSocket 服务端示例,监听客户端连接并回显收到的消息:

立即学习“go语言免费学习笔记(深入)”;

package main

import ("log""net/http""github.com/gorilla/websocket")

var upgrader = websocket.Upgrader{CheckOrigin: func(r *http.Request) bool {return true // 允许跨域连接},}

func handleWebSocket(w http.ResponseWriter, r *http.Request) {conn, err := upgrader.Upgrade(w, r, nil)if err != nil {log.Println("升级失败:", err)return}defer conn.Close()

for {    messageType, message, err := conn.ReadMessage()    if err != nil {        log.Println("读取消息失败:", err)        break    }    log.Printf("收到消息: %s", message)    // 回显消息给客户端    if err := conn.WriteMessage(messageType, message); err != nil {        log.Println("发送消息失败:", err)        break    }}

}

func main() {http.HandleFunc("/ws", handleWebSocket)log.Println("服务器启动在 :8080")log.Fatal(http.ListenAndServe(":8080", nil))}

说明:

upgrader 用于将 HTTP 连接升级为 WebSocket 连接。CheckOrigin 设为 true 是为了允许前端跨域连接,生产环境应根据需要限制来源。conn.ReadMessage() 阻塞等待客户端消息。WriteMessage 将消息原样返回。

3. 编写客户端测试(可用浏览器或命令行)

你可以使用 JavaScript 在浏览器中测试:

const ws = new WebSocket("ws://localhost:8080/ws");

ws.onopen = function() {console.log("连接已建立");ws.send("你好,Go 服务器!");};

ws.onmessage = function(event) {console.log("收到消息:", event.data);};

也可以使用命令行工具如 wscat 测试:

wscat -c ws://localhost:8080/ws

4. 实现广播机制(多人聊天示例)

如果想让一个消息发送给所有连接的客户端,可以维护一个客户端集合:

var clients = make(map[*websocket.Conn]bool)var broadcast = make(chan []byte)

func handleWebSocket(w http.ResponseWriter, r *http.Request) {conn, err := upgrader.Upgrade(w, r, nil)if err != nil {log.Println(err)return}defer conn.Close()

clients[conn] = truefor {    _, message, err := conn.ReadMessage()    if err != nil {        delete(clients, conn)        break    }    broadcast <- message}

}

// 广播协程func broadcastMessages() {for {msg :=

在 main 函数中启动广播协程:

go broadcastMessages()

这样任意客户端发送的消息都会被转发给所有在线用户。

基本上就这些。使用 gorilla/websocket 能快速搭建可靠的 WebSocket 服务,结合 Go 的并发优势,适合构建高并发实时应用。

以上就是如何使用Golang进行WebSocket通信的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1413879.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Golang如何配置Go Modules私有仓库
上一篇 2025年12月16日 07:37:56
Golang如何实现动态路由参数处理
下一篇 2025年12月16日 07:38:07

相关推荐

发表回复

登录后才能评论
关注微信