Apabila bekerja dengan websocket dalam Go menggunakan Gorilla, menghantar kemas kini kepada pelanggan individu boleh menjadi tugas yang rumit. Artikel ini menyelidiki butiran cara untuk mencapai ini dengan berkesan.
Matlamatnya adalah untuk mewujudkan sambungan soket web antara pelanggan dan pelayan. Pelayan harus mendapatkan semula input daripada klien, mengambil data daripada indeks menggunakan saluran Go, dan kemudian menulis kembali data yang diindeks ke soket untuk klien tertentu. Cabarannya terletak pada mengenal pasti pelanggan secara unik dalam kod pelayan.
Kod yang disediakan dalam hub.go menguruskan sambungan klien dan termasuk peta sambungan yang pada asalnya menyimpan nilai boolean untuk setiap pelanggan. Untuk menghantar mesej kepada klien tertentu, peta ini boleh diubah suai untuk menyimpan struct sambungan sebaliknya.
<code class="go">// hub.go // ... Existing code ... type Hub struct { // Registered clients. clients map[*Client]bool // Inbound messages from the clients. broadcast chan []byte // Register requests from the clients. register chan *Client // Unregister requests from clients. unregister chan *Client connections map[string]*connection } // ... Existing code ...</code>
Dalam client.go, medan sambungan boleh diubah suai untuk menyimpan ID unik klien.
<code class="go">// client.go // ... Existing code ... type Client struct { // unique ID for each client ID string // Hub object hub *Hub // The websocket connection. conn *websocket.Conn // Buffered channel of outbound messages. send chan []byte } // ... Existing code ...</code>
Untuk menghantar mesej kepada pelanggan tertentu, kod hub perlu diubah suai untuk memasukkan saluran hantar yang menerima mesej yang mengandungi data mesej dan ID sasaran pelanggan.
<code class="go">// hub.go // ... Existing code ... type Hub struct { // ... Existing fields ... // Send channel for specific clients. send chan message } // ... Existing code ...</code>
Mesej kini boleh dihantar kepada pelanggan tertentu menggunakan saluran hantar hab.
<code class="go">// ... // Send a message to a client with ID "targetID". hub.send <- message{ID: "targetID", data: messageData} // ...</code>
Dengan mengikut langkah yang digariskan di atas, adalah mungkin untuk menghantar mesej websocket kepada pelanggan tertentu apabila menggunakan Gorilla dalam Go. Walau bagaimanapun, adalah penting untuk mempertimbangkan keperluan untuk siaran sebelum melaksanakan corak ini, kerana contoh sembang yang disediakan dalam repositori Gorilla tidak sesuai untuk aplikasi tanpa keperluan siaran.
Atas ialah kandungan terperinci Bagaimana untuk Menghantar Mesej Websocket kepada Pelanggan Tertentu dalam Go Menggunakan Gorilla?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!