登录
首页 >  Golang >  Go教程

Golang实现WebSocket通信教程

时间:2026-05-07 19:59:41 430浏览 收藏

本文手把手教你用Golang基于gorilla/websocket库快速搭建一个功能完备的WebSocket服务端,涵盖依赖安装、HTTP连接升级、跨域配置、消息收发与异常处理等核心环节,并附带可直接运行的完整服务端代码和浏览器端JavaScript测试示例,帮助开发者轻松实现低延迟、全双工的实时通信能力,适用于聊天、通知、协同等典型场景。

Golang如何实现WebSocket数据收发

Go语言实现WebSocket通信主要依赖第三方库 gorilla/websocket,这是目前最常用且稳定的选择。下面介绍如何用Golang搭建一个简单的WebSocket服务端,完成数据的接收与发送。

1. 安装 gorilla/websocket

在项目中引入依赖:

go get github.com/gorilla/websocket

2. 创建WebSocket服务端

使用 gorilla/websocket 提供的 Upgrader 将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 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))
}

3. 客户端测试(JavaScript)

可以用浏览器控制台测试连接:

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("连接关闭");
};

4. 关键点说明

  • Upgrader.CheckOrigin:默认拒绝跨域请求,开发时可设为true,上线前应限制合法来源。
  • ReadMessage():阻塞读取客户端消息,返回消息类型(text/binary)和内容。
  • WriteMessage():向客户端发送数据,保持与读取相同的消息类型更稳妥。
  • defer conn.Close():确保连接关闭,防止资源泄漏。

基本上就这些。通过 gorilla/websocket 可以轻松实现全双工通信,适合实时聊天、通知推送等场景。不复杂但容易忽略错误处理和连接管理,建议结合 context 或 hub 模式做更完善的控制。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>