Rumah  >  Artikel  >  pembangunan bahagian belakang  >  golang WebSocket Tutorial: Bagaimana untuk mencapai komunikasi masa nyata

golang WebSocket Tutorial: Bagaimana untuk mencapai komunikasi masa nyata

王林
王林asal
2023-12-17 13:54:361294semak imbas

golang WebSocket教程:如何实现实时通信

Tutorial Golang WebSocket: Bagaimana untuk mencapai komunikasi masa nyata

Pertama sekali, mari kita perkenalkan apa itu WebSocket. WebSocket ialah protokol untuk komunikasi dupleks penuh antara pelayar web dan pelayan. Tidak seperti protokol HTTP, WebSocket membenarkan pelayan untuk menolak data kepada pelanggan dan boleh melaksanakan komunikasi masa nyata, didorong oleh peristiwa dan fungsi lain.

Dalam tutorial ini, kami akan menggunakan Golang untuk melaksanakan pelayan WebSocket yang mudah. Kami akan menunjukkan cara untuk mewujudkan sambungan WebSocket, menghantar dan menerima mesej, dan menggambarkan dengan contoh kod konkrit.

Pertama, kita perlu mengimport pakej WebSocket Golang:

import (
    "log"
    "net/http"
    "github.com/gorilla/websocket"
)

Kemudian, kita perlu mentakrifkan penaik taraf WebSocket (peningkatan) untuk menaik taraf protokol HTTP kepada protokol WebSocket:

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool { return true },
}

Seterusnya, kita perlu mentakrifkan pengendali WebSocket fungsi. Fungsi ini akan didaftarkan sebagai pengendali HTTP dan akan dipanggil setiap kali terdapat permintaan sambungan WebSocket:

func handleWebSocket(w http.ResponseWriter, r *http.Request) {
    // 将HTTP连接升级为WebSocket连接
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }
    // 在新的goroutine中处理WebSocket连接
    go handleWebSocketConnection(conn)
}

Dalam fungsi yang mengendalikan sambungan WebSocket, kita perlu menentukan gelung untuk mengendalikan penerimaan dan penghantaran mesej:

func handleWebSocketConnection(conn *websocket.Conn) {
    for {
        // 读取客户端发送的消息
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            return
        }
        // 打印接收到的消息
        log.Println("Received message:", string(msg))
        
        // 发送消息给客户端
        err = conn.WriteMessage(websocket.TextMessage, []byte("Hello, client!"))
        if err != nil {
            log.Println(err)
            return
        }
    }
}

Sekarang, Kami hanya perlu mendaftarkan fungsi di atas sebagai pengendali HTTP dan memulakan pelayan HTTP:

func main() {
    // 注册WebSocket处理器
    http.HandleFunc("/ws", handleWebSocket)
    // 启动HTTP服务器
    log.Println("WebSocket server started on localhost:8080")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal(err)
    }
}

Pada ketika ini, kami telah melengkapkan pelayan WebSocket yang mudah. Apabila pelanggan menyambung ke pelayan melalui WebSocket, pelayan akan menerima mesej yang dihantar oleh pelanggan dan membalas dengan mesej tetap.

Untuk menguji pelayan, kita boleh menggunakan pemalam pelayar, seperti "Simple WebSocket Client", masukkan alamat pelayan ws://localhost:8080/ws dan sambungkan. Masukkan mesej dalam kotak mesej pemalam dan hantarkannya Kami akan dapat melihat mesej yang diterima dalam terminal dan membalas mesej kepada pelanggan pada masa yang sama.

Di atas ialah tutorial asas kami tentang menggunakan Golang untuk melaksanakan WebSocket. WebSocket mempunyai potensi besar dalam komunikasi masa nyata, dipacu peristiwa, dsb., dan boleh digunakan dalam aplikasi sembang, visualisasi data masa nyata dan senario lain. Melalui tutorial ini, saya harap ia dapat memberikan sedikit bantuan untuk anda memahami dan menggunakan WebSocket.

Atas ialah kandungan terperinci golang WebSocket Tutorial: Bagaimana untuk mencapai komunikasi masa nyata. 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