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中文網其他相關文章!