go 中接收 websocket 消息的方法取决于客户端和服务器端:客户端:使用 readmessage 函数读取消息,返回消息类型、负载和错误。服务器:读取连接客户端的 readmessage 方法,同样返回消息类型、负载和错误。

WebSocket 是一种全双工通信协议,允许客户端和服务器在建立单一连接后进行双向通信。本文将介绍如何在 Go 中接收 WebSocket 消息。
在客户端,可以通过 ReadMessage 函数接收消息:
import "github.com/gorilla/websocket"
type Message struct {
Type int
Payload []byte
}
func readMessage(conn *websocket.Conn) (*Message, error) {
mt, r, err := conn.ReadMessage()
if err != nil {
return nil, err
}
return &Message{
Type: mt,
Payload: r,
}, nil
}ReadMessage 函数返回三个值:消息类型 (mt)、消息负载 (r) 和一个错误 (err)。消息类型是一个整数值,表示消息的类型(文本、二进制等)。
在服务器端,可以通过客户端连接的 ReadMessage 方法接收消息:
func (c *Client) readMessage() (*Message, error) {
mt, r, err := c.conn.ReadMessage()
if err != nil {
return nil, err
}
return &Message{
Type: mt,
Payload: r,
}, nil
}以下是一个接收 WebSocket 消息并将其输出到控制台的 Go 客户端示例:
package main
import (
"fmt"
"log"
"github.com/gorilla/websocket"
)
func main() {
conn, _, err := websocket.DefaultDialer.Dial("ws://example.com/ws", nil)
if err != nil {
log.Fatal("dial:", err)
}
defer conn.Close()
for {
_, message, err := conn.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway,
websocket.CloseAbnormalClosure) {
log.Fatal("unexpected close:", err)
}
continue
}
fmt.Printf("received: %s\n", message)
}
}同样的,以下是一个接收 WebSocket 消息并在数据库中存储它们的 Go 服务器示例:
package main
import (
"database/sql"
"fmt"
"log"
"github.com/gorilla/websocket"
)
func main() {
// 数据库设置...
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Fatal("upgrade:", err)
}
defer conn.Close()
for {
_, message, err := conn.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway,
websocket.CloseAbnormalClosure) {
log.Fatal("unexpected close:", err)
}
continue
}
// 将消息保存到数据库...
}
}以上就是Go WebSocket 消息如何接收?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号