Maison > développement back-end > Golang > le corps du texte

Comment Go WebSocket étend-il et personnalise-t-il les formats de messages ?

WBOY
Libérer: 2024-06-01 17:29:02
original
450 Les gens l'ont consulté

Oui, vous pouvez utiliser MessageHandler ou Subprotocols pour personnaliser le format de message Go WebSocket. MessageHandler vous permet de définir directement la logique de traitement des messages, tandis que les sous-protocoles fournissent un moyen de négocier les sous-protocoles avant d'établir une connexion. Les étapes spécifiques sont les suivantes : Utilisez MessageHandler pour personnaliser le format du message : Créez un nouveau WebSocketConn et transmettez-le au programme de mise à niveau. WebSocket définit les méthodes OnMessage et OnOpen sur l'interface MessageHandler pour personnaliser le traitement des messages et la logique de traitement de l'établissement de connexion. Utilisez des sous-protocoles pour négocier. sous-protocoles : ajoutez des paramètres de sous-protocoles transmis au programme de mise à niveau pour accéder au protocole déterminé via la méthode Subprotocol() de WebSocketConn Grâce à ces méthodes, vous pouvez facilement étendre et personnaliser le format de message de Go WebSocket en fonction de vos besoins spécifiques.

Go WebSocket 如何扩展和自定义消息格式?

Go WebSocket Personnalisation du format de message

WebSocket est un protocole qui permet l'établissement d'un canal de communication full-duplex entre un client et un serveur. Bien que les messages WebSocket soient généralement transmis au format JSON, vous devrez parfois personnaliser le format du message. Go propose plusieurs façons d’y parvenir.

Utilisation de MessageHandler

L'interface MessageHandler définit deux méthodes :

type MessageHandler interface {
    // OnMessage 实现 ReadMessage 方法。
    OnMessage(message []byte)
    // OnOpen 实现对 WebSocket 连接建立的处理。
    OnOpen()
}
Copier après la connexion

Pour utiliser MessageHandler, vous pouvez créer un nouveau WebSocketConn et le transmettre à Upgrader.WebSocket :

upgrader := websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

ws, err := upgrader.Upgrade(w, r, wsConfig, wsHandler{})
Copier après la connexion

wsHandler devrait implémenter le Interface MessageHandler définie ci-dessus. wsHandler 应该实现上面定义的 MessageHandler 接口。

// wsHandler 定义新的消息处理程序。
type wsHandler struct{}

// OnMessage 处理新消息。
func (wsHandler) OnMessage(message []byte) {
    // 自定义消息处理逻辑
}

// OnOpen 处理连接建立。
func (wsHandler) OnOpen() {
    // 可选的连接建立处理逻辑
}
Copier après la connexion

使用 Subprotocols

WebSocket 允许双方在建立连接之前协商子协议。要使用子协议,可以将 Subprotocols 参数传递给 upgrader:

upgrader := websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    Subprotocols:    []string{"your-protocol"},
}
Copier après la connexion

然后,可以通过 WebSocketConn 的 Subprotocol() 方法访问确定的协议:

ws, _ := upgrader.Upgrade(w, r, wsConfig, wsHandler{})
protocol := ws.Subprotocol()
Copier après la connexion

实战案例

假设我们希望为聊天应用程序自定义消息格式。消息将包含字段:

  • type: 消息类型(例如,text、image)。
  • sender: 发送者。
  • content: 消息内容。

我们可以创建以下自定义消息类型:

type Message struct {
    Type     string `json:"type"`
    Sender   string `json:"sender"`
    Content  string `json:"content"`
}
Copier après la connexion

然后,我们可以更新 wsHandler

func (wsHandler) OnMessage(message []byte) {
    var msg Message
    if err := json.Unmarshal(message, &msg); err != nil {
        log.Println(err)
        return
    }

    switch msg.Type {
    case "text":
        // 处理文本消息
    case "image":
        // 处理图片消息
    default:
        log.Printf("未知消息类型:%s", msg.Type)
    }
}
Copier après la connexion

Utilisation de sous-protocoles

🎜🎜WebSocket permet aux deux parties de négocier des sous-protocoles avant d'établir une connexion. Pour utiliser des sous-protocoles, vous pouvez passer le paramètre Subprotocols à l'upgradeur : 🎜rrreee🎜 Ensuite, vous pouvez accéder au protocole déterminé via la méthode Subprotocol() de WebSocketConn : 🎜rrreee 🎜🎜Cas pratique 🎜🎜🎜 Supposons que nous souhaitions personnaliser le format des messages pour une application de chat. Le message contiendra des champs : 🎜
  • type : Type de message (par exemple, texte, image).
  • expéditeur : expéditeur.
  • content : contenu du message.
🎜Nous pouvons créer le type de message personnalisé suivant : 🎜rrreee🎜 Nous pouvons ensuite mettre à jour le wsHandler pour gérer le message personnalisé : 🎜rrreee🎜En suivant ces instructions, vous allez Le format de message de WebSocket peut être facilement étendu et personnalisé pour répondre à vos besoins spécifiques. 🎜

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal