La méthode de réception des messages WebSocket dans Go dépend du côté client et serveur : Client : utilisez la fonction ReadMessage pour lire le message et renvoyer le type de message, la charge utile et l'erreur. Serveur : lit la méthode ReadMessage du client connecté, qui renvoie également le type de message, la charge utile et l'erreur.
WebSocket est un protocole de communication full-duplex qui permet au client et au serveur de communiquer dans les deux sens après avoir établi une seule connexion. Cet article explique comment recevoir des messages WebSocket dans Go.
Sur le client, vous pouvez recevoir des messages via la fonction 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
La fonction renvoie trois valeurs : type de message (mt
), la charge utile du message (r
) et une erreur (err
). Le type de message est une valeur entière indiquant le type de message (texte, binaire, etc.). Le serveur reçoit le messageCôté serveur, vous pouvez recevoir le message via la méthode ReadMessage
de la connexion client : 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) } }
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 } // 将消息保存到数据库... } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!