Bagaimanakah Go WebSocket memanjangkan dan menyesuaikan format mesej?

WBOY
Lepaskan: 2024-06-01 17:29:02
asal
425 orang telah melayarinya

Ya, anda boleh menggunakan MessageHandler atau Subprotocols untuk menyesuaikan format mesej Go WebSocket. MessageHandler membolehkan anda mentakrifkan logik pemprosesan mesej secara langsung, manakala Subprotokol menyediakan cara untuk merundingkan subprotokol sebelum membuat sambungan. Langkah-langkah khusus adalah seperti berikut: Gunakan MessageHandler untuk menyesuaikan format mesej: Cipta WebSocketConn baharu dan hantarkannya kepada penaik taraf.WebSocket mentakrifkan kaedah OnMessage dan OnOpen pada antara muka MessageHandler untuk menyesuaikan pemprosesan mesej dan logik pemprosesan penubuhan sambungan berunding subprotokol: pindahkan Parameter Subprotokol yang dihantar kepada penaik taraf mengakses protokol yang ditentukan melalui kaedah Subprotocol() WebSocketConn Melalui kaedah ini, anda boleh dengan mudah memanjangkan dan menyesuaikan format mesej Go WebSocket mengikut keperluan khusus anda.

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

Go Penyesuaian Format Mesej WebSocket

WebSocket ialah protokol yang membenarkan penubuhan saluran komunikasi dupleks penuh antara pelanggan dan pelayan. Walaupun mesej WebSocket biasanya dihantar menggunakan format JSON, kadangkala anda mungkin perlu menyesuaikan format mesej. Go menyediakan beberapa cara untuk mencapai ini. . Antara muka MessageHandler yang ditakrifkan di atas.

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

Menggunakan Subprotokol

WebSocket membolehkan kedua-dua pihak merundingkan subprotokol sebelum mewujudkan sambungan. Untuk menggunakan subprotokol, anda boleh menghantar parameter Subprotocols kepada penaik taraf:

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

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

Kemudian, anda boleh mengakses protokol yang ditentukan melalui kaedah Subprotocol() WebSocketConn:

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

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

// OnOpen 处理连接建立。
func (wsHandler) OnOpen() {
    // 可选的连接建立处理逻辑
}
Salin selepas log masuk

wsHandler 应该实现上面定义的 MessageHandler 接口。

upgrader := websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    Subprotocols:    []string{"your-protocol"},
}
Salin selepas log masuk

使用 Subprotocols

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

ws, _ := upgrader.Upgrade(w, r, wsConfig, wsHandler{})
protocol := ws.Subprotocol()
Salin selepas log masuk

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

type Message struct {
    Type     string `json:"type"`
    Sender   string `json:"sender"`
    Content  string `json:"content"`
}
Salin selepas log masuk

实战案例

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

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

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

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)
    }
}
Salin selepas log masuk

然后,我们可以更新 wsHandlerKes Amalan

Katakan kita ingin menyesuaikan format mesej untuk aplikasi sembang. Mesej akan mengandungi medan: 🎜
  • type: Jenis mesej (cth., teks, imej).
  • pengirim: Pengirim.
  • kandungan: kandungan mesej.
🎜Kami boleh mencipta jenis mesej tersuai berikut: 🎜rrreee🎜 Kami kemudiannya boleh mengemas kini wsHandler untuk mengendalikan mesej tersuai: 🎜rrreee🎜Dengan mengikuti arahan ini, anda Go WebSocket's format mesej boleh diperluas dan disesuaikan dengan mudah untuk memenuhi keperluan khusus anda. 🎜

Atas ialah kandungan terperinci Bagaimanakah Go WebSocket memanjangkan dan menyesuaikan format mesej?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!