Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk menerima mesej Go WebSocket?
Kaedah menerima mesej WebSocket dalam Go bergantung pada sisi klien dan pelayan: Klien: Gunakan fungsi ReadMessage untuk membaca mesej dan mengembalikan jenis mesej, muatan dan ralat. Pelayan: Baca kaedah ReadMessage klien yang disambungkan, yang juga mengembalikan jenis mesej, muatan dan ralat.
WebSocket ialah protokol komunikasi dupleks penuh yang membolehkan pelanggan dan pelayan berkomunikasi dalam kedua-dua arah selepas mewujudkan satu sambungan. Artikel ini menerangkan cara menerima mesej WebSocket dalam Go.
Pada klien, anda boleh menerima mesej melalui fungsi ReadMessage
: 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 }
ReadMessage
Fungsi mengembalikan tiga nilai: jenis mesej (r
), dan ralat (err
). Jenis mesej ialah nilai integer yang menunjukkan jenis mesej (teks, binari, dll.). Pelayan menerima mesejDi bahagian pelayan, anda boleh menerima mesej melalui kaedah ReadMessage
sambungan klien: 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) } }Kes praktikal🎜🎜Berikut adalah kaedah yang menerima WebSocket mesej dan mengeluarkannya ke konsol contoh klien 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 } // 将消息保存到数据库... } }🎜Begitu juga, berikut ialah contoh pelayan Go yang menerima mesej WebSocket dan menyimpannya dalam pangkalan data: 🎜rrreee
Atas ialah kandungan terperinci Bagaimana untuk menerima mesej Go WebSocket?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!