Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erweitert und passt Go WebSocket Nachrichtenformate an?

Wie erweitert und passt Go WebSocket Nachrichtenformate an?

WBOY
WBOYOriginal
2024-06-01 17:29:02444Durchsuche

Ja, Sie können MessageHandler oder Subprotocols verwenden, um das Go WebSocket-Nachrichtenformat anzupassen. Mit MessageHandler können Sie die Nachrichtenverarbeitungslogik direkt definieren, während Unterprotokolle eine Möglichkeit bieten, Unterprotokolle auszuhandeln, bevor eine Verbindung hergestellt wird. Die spezifischen Schritte lauten wie folgt: Verwenden Sie MessageHandler, um das Nachrichtenformat anzupassen: Erstellen Sie ein neues WebSocketConn und übergeben Sie es an den Upgrader. WebSocket definiert die Methoden OnMessage und OnOpen auf der MessageHandler-Schnittstelle, um die Logik für die Nachrichtenverarbeitung und den Verbindungsaufbau anzupassen Unterprotokolle: An den Upgrader übergebene Unterprotokollparameter greifen über die Subprotocol()-Methode von WebSocketConn auf das bestimmte Protokoll zu. Mit diesen Methoden können Sie das Nachrichtenformat von Go WebSocket einfach erweitern und an Ihre spezifischen Anforderungen anpassen.

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

Go WebSocket-Nachrichtenformatanpassung

WebSocket ist ein Protokoll, das die Einrichtung eines Vollduplex-Kommunikationskanals zwischen einem Client und einem Server ermöglicht. Obwohl WebSocket-Nachrichten normalerweise im JSON-Format übertragen werden, müssen Sie manchmal das Nachrichtenformat anpassen. Go bietet mehrere Möglichkeiten, dies zu erreichen.

MessageHandler verwenden

Die MessageHandler-Schnittstelle definiert zwei Methoden:

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

Um MessageHandler zu verwenden, können Sie einen neuen WebSocketConn erstellen und ihn an upgrader.WebSocket übergeben:

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

ws, err := upgrader.Upgrade(w, r, wsConfig, wsHandler{})

wsHandler sollte den implementieren Die oben definierte MessageHandler-Schnittstelle. 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)
    }
}

Verwendung von Subprotokollen

🎜🎜WebSocket ermöglicht es beiden Parteien, Subprotokolle auszuhandeln, bevor eine Verbindung hergestellt wird. Um Unterprotokolle zu verwenden, können Sie den Parameter Subprotocols an den Upgrader übergeben: 🎜rrreee🎜 Anschließend können Sie über die Methode Subprotocol() von WebSocketConn auf das bestimmte Protokoll zugreifen: 🎜rrreee 🎜🎜Übungsfall 🎜🎜🎜 Angenommen, wir möchten das Nachrichtenformat für eine Chat-Anwendung anpassen. Die Nachricht enthält folgende Felder: 🎜
  • type: Nachrichtentyp (z. B. Text, Bild).
  • sender: Absender.
  • content: Nachrichteninhalt.
🎜Wir können den folgenden benutzerdefinierten Nachrichtentyp erstellen: 🎜rrreee🎜 Anschließend können wir den wsHandler aktualisieren, um die benutzerdefinierte Nachricht zu verarbeiten: 🎜rrreee🎜Indem Sie diese Anweisungen befolgen, können Sie loslegen Das Nachrichtenformat von WebSocket kann problemlos erweitert und an Ihre spezifischen Anforderungen angepasst werden. 🎜

Das obige ist der detaillierte Inhalt vonWie erweitert und passt Go WebSocket Nachrichtenformate an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn