0Pricing
Go Academy · 课时

WebSocket 基础

实时双向通信

WebSocket 基础 是 CoddyKit 上的免费 Go Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。

实时双向通信

HTTP 采用请求-响应模式:客户端发出请求,服务器返回响应,连接在逻辑上随即结束。聊天、实时仪表板和游戏需要持久的双向通道,这正是 WebSockets 所提供的功能。

升级握手

WebSocket 连接会以普通 HTTP 请求开始,并带有特殊标头:

  • Upgrade: websocket
  • Connection: Upgrade

服务器会响应 101 Switching Protocols,然后重新使用 TCP 套接字传输全双工帧。

为什么不直接轮询

在 WebSockets 出现之前,应用会使用轮询(重复请求)或长轮询。两者都会浪费带宽并增加延迟。WebSockets 会保持一个开放连接,因此任意一方都可以立即发送数据。

帧,而不是请求

升级完成后,数据会以轻量级帧的形式传输,而不是 HTTP 消息。帧可以是文本或二进制数据,还存在用于 ping/pong 和关闭连接的控制帧。

全双工

与 HTTP 不同,两个对等方都可以随时发送数据,无需等待回复。服务器可以在状态发生变化的瞬间推送通知,客户端也可以同时发送输入。

ws 与 wss

与 http/https 类似,WebSockets 有两种协议方案:

  • ws:// 明文传输
  • wss:// 通过 TLS 传输(生产环境请使用此方案)

标准库支持

仅使用 net/http 时,Go 的标准库没有 WebSocket 实现。社区通常使用 github.com/gorilla/websocket 或 nhooyr.io/websocket。下一课将介绍 gorilla。

import "github.com/gorilla/websocket"

一种心智模型

请把 WebSocket 想象成一次电话通话:

  • 拨号 = HTTP 升级握手
  • 保持接通 = 持久连接
  • 双方交谈 = 全双工帧
  • 挂断 = 关闭帧

消息类型

最重要的两种数据帧类型是:

  • 文本帧承载 UTF-8(通常是 JSON)
  • 二进制帧承载原始字节(protobuf、图像)

控制帧(ping、pong、close)负责管理连接本身。

WebSocket 的优势场景

非常适合以下场景:

  • 聊天和在线状态
  • 实时交易或体育比分
  • 协作编辑
  • 多人游戏状态

如果只需要从服务器单向发送到客户端,服务器发送事件可能更简单。

可运行示例:理解帧的概念

WebSocket 代码需要外部库,因此这里使用标准库进行类比:通过一个函数将消息分类为文本或二进制,以说明帧类型。

package main

import (
    "fmt"
    "unicode/utf8"
)

func frameType(data []byte) string {
    if utf8.Valid(data) {
        return "text"
    }
    return "binary"
}

func main() {
    fmt.Println(frameType([]byte("hello")))
    fmt.Println(frameType([]byte{0xff, 0x00, 0x01}))
}

快速检查

请测试您对 WebSocket 基础知识的理解。

回顾

您学习了 WebSocket 的基础知识:

  • 它提供持久的全双工通信
  • 它以 HTTP 升级握手开始(101 响应)
  • 数据以文本帧或二进制帧流动;控制帧负责管理连接
  • 在生产环境中使用 wss://;Go 依赖 gorilla/websocket 之类的库

常见问题解答

「WebSocket 基础」课时是免费的吗?

是的 — 「WebSocket 基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。

「WebSocket 基础」这节课中我会学到什么?

实时双向通信 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Go Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「WebSocket 基础」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Go Academy 课中编写并运行代码吗?

能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. WebSocket 基础
  2. 使用 gorilla/websocket
  3. 广播消息
  4. 连接管理
← 返回 Go Academy