はい、MessageHandler またはサブプロトコルを使用して Go WebSocket メッセージ形式をカスタマイズできます。 MessageHandler を使用すると、メッセージ処理ロジックを直接定義できます。一方、サブプロトコルは、接続を確立する前にサブプロトコルをネゴシエートする方法を提供します。具体的な手順は次のとおりです。 MessageHandler を使用してメッセージ形式をカスタマイズします。 新しい WebSocketConn を作成し、それをアップグレーダーに渡します。WebSocket は、MessageHandler インターフェイスで OnMessage メソッドと OnOpen メソッドを定義し、メッセージ処理と接続確立処理ロジックをカスタマイズします。サブプロトコルのネゴシエーション: サブプロトコルの転送 アップグレーダーに渡されるパラメーターは、WebSocketConn の Subprotocol() メソッドを通じて、特定のプロトコルにアクセスします。これらのメソッドを通じて、特定のニーズに応じて Go WebSocket のメッセージ形式を簡単に拡張およびカスタマイズできます。
Go WebSocket メッセージ形式のカスタマイズ
WebSocket は、クライアントとサーバー間の全二重通信チャネルの確立を可能にするプロトコルです。 WebSocket メッセージは通常、JSON 形式を使用して送信されますが、メッセージ形式のカスタマイズが必要になる場合があります。 Go には、これを実現するためのいくつかの方法が用意されています。
MessageHandler の使用
MessageHandler インターフェースは 2 つのメソッドを定義します:
type MessageHandler interface { // OnMessage 实现 ReadMessage 方法。 OnMessage(message []byte) // OnOpen 实现对 WebSocket 连接建立的处理。 OnOpen() }
MessageHandler を使用するには、新しい WebSocketConn を作成し、それを upgrader.WebSocket に渡すことができます:
upgrader := websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } ws, err := upgrader.Upgrade(w, r, wsConfig, wsHandler{})
wsHandler
は、上記で定義された MessageHandler インターフェイス。 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) } }
サブプロトコルの使用
🎜🎜WebSocket を使用すると、接続を確立する前に双方がサブプロトコルをネゴシエートできます。サブプロトコルを使用するには、Subprotocols
パラメーターをアップグレーダーに渡すことができます: 🎜rrreee🎜 その後、WebSocketConn の Subprotocol()
メソッドを通じて決定されたプロトコルにアクセスできます: 🎜rrreee 🎜🎜実践ケース 🎜🎜🎜 チャット アプリケーションのメッセージ形式をカスタマイズしたいとします。メッセージには次のフィールドが含まれます: 🎜type
: メッセージ タイプ (テキスト、画像など)。 送信者
: 送信者。 content
: メッセージのコンテンツ。 wsHandler
を更新できます: 🎜rrreee🎜これらの手順に従うことで、Go WebSocket のメッセージ形式は、特定のニーズに合わせて簡単に拡張およびカスタマイズできます。 🎜以上がGo WebSocket はどのようにメッセージ形式を拡張およびカスタマイズしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。