Maison > Article > développement back-end > Comment Go WebSocket étend-il et personnalise-t-il les formats de messages ?
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 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() }
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{})
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() { // 可选的连接建立处理逻辑 }
使用 Subprotocols
WebSocket 允许双方在建立连接之前协商子协议。要使用子协议,可以将 Subprotocols
参数传递给 upgrader:
upgrader := websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, Subprotocols: []string{"your-protocol"}, }
然后,可以通过 WebSocketConn 的 Subprotocol()
方法访问确定的协议:
ws, _ := upgrader.Upgrade(w, r, wsConfig, wsHandler{}) protocol := ws.Subprotocol()
实战案例
假设我们希望为聊天应用程序自定义消息格式。消息将包含字段:
type
: 消息类型(例如,text、image)。sender
: 发送者。content
: 消息内容。我们可以创建以下自定义消息类型:
type Message struct { Type string `json:"type"` Sender string `json:"sender"` Content string `json:"content"` }
然后,我们可以更新 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) } }
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ètreSubprotocols
à 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. 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!