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

Go WebSocket 消息如何接收?
WebSocket 是一种全双工通信协议,允许客户端和服务器在建立单一连接后进行双向通信。本文将介绍如何在 Go 中接收 WebSocket 消息。
客户端接收消息
在客户端,可以通过 ReadMessage 函数接收消息:
import "<a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/15841.html" target="_blank">git</a>hub.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: %sn", 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 消息如何接收?的详细内容,更多请关注叮当号网其它相关文章!
文章来自互联网,只做分享使用。发布者:走不完的路,转转请注明出处:https://www.dingdanghao.com/article/501620.html
