Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menghantar Mesej Soket Web Tertentu kepada Pelanggan dalam Go (Gorilla)?

Bagaimana untuk Menghantar Mesej Soket Web Tertentu kepada Pelanggan dalam Go (Gorilla)?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 21:42:29226semak imbas

How to Send a Specific Websocket Message to a Client in Go (Gorilla)?

Menghantar Mesej Soket Web Tertentu kepada Pelanggan dalam Go (Menggunakan Gorila)

Soket Web menyediakan protokol berorientasikan sambungan untuk komunikasi kependaman rendah antara pelanggan dan pelayan. Dalam Go, beberapa rangka kerja memudahkan pengendalian soket web, termasuk Gorilla. Walau bagaimanapun, memahami cara menghantar mesej kepada pelanggan tertentu boleh menjadi mencabar.

Persediaan Pelanggan dan Pelayan

Dalam Gorilla, pelayan mewujudkan hab untuk mengurus sambungan pelanggan. Hab termasuk peta pelanggan dan saluran untuk penyiaran mesej. Setiap pelanggan mempunyai sambungan soket web dan saluran hantar.

Mengenal pasti Pelanggan Tertentu

Untuk menghantar mesej kepada pelanggan tertentu, anda memerlukan cara untuk mengenal pasti secara unik . Biasanya, ini dilakukan dengan mencipta medan ID unik dalam struct klien.

Menghantar Mesej Tertentu

Untuk menghantar mesej kepada pelanggan tertentu, anda boleh sama ada ubah suai hab atau tulis terus ke sambungan soket web pelanggan. Mengubah suai hab memerlukan mencipta jenis mesej yang merangkumi ID dan data pelanggan sasaran. Anda kemudiannya akan menggantikan saluran siaran dengan saluran mesej dan mengubah suai hab untuk gelung sewajarnya:

<code class="go">type message struct {
    ID idType
    data []byte
}

func (h *Hub) run() {
    for {
        select {
        case client := <-h.register:
            h.clients[client.ID] = client
        case client := <-h.unregister:
            if _, ok := h.clients[client.ID]; ok {
                delete(h.clients, client.ID)
                close(client.send)
            }
        case message := <-h.send:
            if client, ok := h.clients[message.ID]; ok {
                select {
                case client.send <- message.data:
                default:
                    close(client.send)
                    delete(h.connections, client)
                }
            }
        }
    }
}</code>

Menghantar mesej kepada pelanggan tertentu kemudiannya akan melibatkan:

<code class="go">hub.send <- message{ID: targetID, data: data}</code>

Sebagai alternatif, anda boleh menulis terus ke sambungan websoket pelanggan menggunakan NextWriter atau WriteMessage. Pendekatan ini memerlukan mengekalkan sambungan kepada setiap pelanggan dan memastikan tulisan berbenang tunggal pada sambungan.

Atas ialah kandungan terperinci Bagaimana untuk Menghantar Mesej Soket Web Tertentu kepada Pelanggan dalam Go (Gorilla)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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