17.8 WebSocket 客户端
本篇学习 WebSocket 客户端的连接、发送与读取响应流程,并能请求本地 WebSocket 服务。
WebSocket 客户端
概念说明
WebSocket 客户端负责连接 WebSocket 服务端。
连接成功后,可以使用同一条连接持续发送和接收消息。
下面示例需要先启动上一节的 WebSocket 服务端。
客户端同样使用 github.com/gorilla/websocket。
安装依赖
1
2
| go mod init go-network-practice
go get github.com/gorilla/websocket
|
如果你已经在现成的 Go 模块里练习,可以跳过 go mod init。
语法/规则
- 使用
websocket.DefaultDialer.Dial(url, nil) 建立连接。 - 使用
WriteMessage 发送消息。 - 使用
ReadMessage 接收消息。 - 使用完成后关闭连接。
- 服务端地址必须使用
ws:// 或 wss:// 协议。
WebSocket 客户端示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| package main
import (
"fmt"
"github.com/gorilla/websocket"
)
func main() {
conn, _, err := websocket.DefaultDialer.Dial("ws://127.0.0.1:8080/ws", nil) // 建立 WebSocket 连接
if err != nil {
panic(err)
}
defer conn.Close()
err = conn.WriteMessage(websocket.TextMessage, []byte("hello")) // 发送一条文本消息
if err != nil {
panic(err)
}
_, message, err := conn.ReadMessage() // 读取服务端返回的消息
if err != nil {
panic(err)
}
fmt.Println(string(message))
}
|
输出结果:
常见错误
- 地址写成
http://,WebSocket 客户端应使用 ws:// 或 wss://。 - 没先启动服务端就运行客户端,导致连接失败。
- 连接成功后忘记关闭连接。
- 发送和读取消息时不检查错误,导致断连问题被忽略。