首頁  >  文章  >  後端開發  >  Go WebSocket 如何實現雙向通訊?

Go WebSocket 如何實現雙向通訊?

WBOY
WBOY原創
2024-06-05 21:38:001070瀏覽

Go 語言內建了對 WebSocket 的支持,可透過以下步驟實現雙向通訊:建立 WebSocket 服務端:建立 HTTP 處理程序函數。建立 Upgrader 結構體升級 HTTP 請求。啟動 WebSocket 服務端。建立 WebSocket 用戶端:建立 HTTP 請求並設定 WebSocket 頭。創建 Dialer 結構體。使用 Dial 方法建立連線。

Go WebSocket 如何实现双向通信?

Go WebSocket:實現雙向通訊

WebSocket 是一種雙向通訊協議,允許客戶端與伺服器在單一持久的TCP 連線上進行即時資料交換。 Go 語言為開發者提供了 WebSocket 的內建支持,使其實現雙向通訊變得簡單直接。

建立WebSocket 服務端

建立WebSocket 服務端需要三個步驟:

    ##使用
  1. net/http 套件建立http.Handler 函數,該函數處理WebSocket 連線。
  2. 建立
  3. websocket.Upgrader 結構體,該結構體將 HTTP 請求升級為 WebSocket 連線。
  4. 使用
  5. http.ServeHTTP 方法啟動 WebSocket 服務端。
  6. 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
  1. 套件建立http.Request,並設定"Upgrade: WebSocket" 頭。 建立
  2. websocket.Dialer
  3. 結構體,該結構體用於建立 WebSocket 連線。 使用
  4. Dial
  5. 方法建立連線。
    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))
        }
    }
  6. 透過這些步驟,您可以輕鬆地在 Go 中實現 WebSocket 雙向通信,為您的應用程式添加即時互動功能。

以上是Go WebSocket 如何實現雙向通訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn