Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Go WebSocket melaksanakan komunikasi dua hala?
Bahasa Go mempunyai sokongan terbina dalam untuk WebSocket, yang boleh mencapai komunikasi dua hala melalui langkah berikut: Cipta pelayan WebSocket: Cipta fungsi pengendali HTTP. Buat struktur Penaik taraf untuk menaik taraf permintaan HTTP. Mulakan pelayan WebSocket. Buat klien WebSocket: Buat permintaan HTTP dan tetapkan pengepala WebSocket. Buat struktur Dialer. Gunakan kaedah Dail untuk mewujudkan sambungan.
Go WebSocket: Mendayakan komunikasi dua hala
WebSocket ialah protokol komunikasi dua hala yang membenarkan pertukaran data masa nyata antara pelanggan dan pelayan melalui satu sambungan TCP berterusan. Bahasa Go menyediakan pembangun dengan sokongan terbina dalam untuk WebSocket, menjadikan komunikasi dua hala mudah dan mudah.
Mencipta pelayan WebSocket
Mencipta pelayan WebSocket memerlukan tiga langkah:
net/http
untuk mencipta fungsi http.Handler
, yang mana mengendalikan sambungan WebSocket. net/http
包创建 http.Handler
函数,该函数处理 WebSocket 连接。websocket.Upgrader
结构体,该结构体将 HTTP 请求升级为 WebSocket 连接。http.ServeHTTP
方法启动 WebSocket 服务端。package main import ( "log" "net/http" "github.com/gorilla/websocket" ) func main() { // HTTP 处理程序 handler := func(w http.ResponseWriter, r *http.Request) { upgrader := websocket.Upgrader{} conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Fatal(err) } defer conn.Close() for { messageType, message, err := conn.ReadMessage() if err != nil { log.Fatal(err) } if messageType == websocket.CloseMessage { log.Println("Client closed connection") return } log.Printf("Received from client: %s", string(message)) err = conn.WriteMessage(messageType, []byte("Echoed: "+string(message))) if err != nil { log.Fatal(err) } } } // 启动 WebSocket 服务端 http.HandleFunc("/websocket", handler) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal(err) } }
创建 WebSocket 客户端
创建 WebSocket 客户端同样需要三步:
net/http
包创建 http.Request
,并设置 "Upgrade: WebSocket"
头。websocket.Dialer
结构体,该结构体用于建立 WebSocket 连接。Dial
websocket.Upgrader
, yang meningkatkan permintaan HTTP kepada sambungan WebSocket. Gunakan kaedah http.ServeHTTP
untuk memulakan pelayan WebSocket.
package main import ( "fmt" "log" "github.com/gorilla/websocket" ) func main() { dialers := websocket.Dialer{ ReadBufferSize: 1024, WriteBufferSize: 1024, } conn, _, err := dialers.Dial("ws://localhost:8080/websocket", nil) if err != nil { log.Fatal(err) } defer conn.Close() for i := 0; i < 10; i++ { message := fmt.Sprintf("Hello from client %d", i) err := conn.WriteMessage(websocket.TextMessage, []byte(message)) if err != nil { log.Fatal(err) } _, message, err = conn.ReadMessage() if err != nil { log.Fatal(err) } log.Printf("Received echo: %s", string(message)) } }🎜🎜Mencipta klien WebSocket🎜🎜🎜Mencipta klien WebSocket juga memerlukan tiga langkah: 🎜🎜🎜Gunakan pakej
net/http
untuk mencipta http.Request
dan tetapkan pengepala "Upgrade: WebSocket"
. 🎜🎜Buat struktur websocket.Dialer
, yang digunakan untuk mewujudkan sambungan WebSocket. 🎜🎜Gunakan kaedah Dail
untuk mewujudkan sambungan. 🎜🎜rrreee🎜Dengan langkah ini, anda boleh melaksanakan komunikasi dua hala WebSocket dengan mudah dalam Go, menambahkan keupayaan interaksi masa nyata pada aplikasi anda. 🎜Atas ialah kandungan terperinci Bagaimanakah Go WebSocket melaksanakan komunikasi dua hala?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!