Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert Go WebSocket die bidirektionale Kommunikation?

Wie implementiert Go WebSocket die bidirektionale Kommunikation?

WBOY
WBOYOriginal
2024-06-05 21:38:001090Durchsuche

Die Go-Sprache verfügt über eine integrierte Unterstützung für WebSocket, die durch die folgenden Schritte eine bidirektionale Kommunikation erreichen kann: Erstellen Sie einen WebSocket-Server: Erstellen Sie eine HTTP-Handler-Funktion. Erstellen Sie eine Upgrader-Struktur, um die HTTP-Anfrage zu aktualisieren. Starten Sie den WebSocket-Server. Erstellen Sie einen WebSocket-Client: Erstellen Sie eine HTTP-Anfrage und legen Sie die WebSocket-Header fest. Erstellen Sie eine Dialer-Struktur. Verwenden Sie die Wählmethode, um eine Verbindung herzustellen.

Go WebSocket 如何实现双向通信?

Go WebSocket: Ermöglicht bidirektionale Kommunikation

WebSocket ist ein bidirektionales Kommunikationsprotokoll, das den Echtzeit-Datenaustausch zwischen Client und Server über eine einzige dauerhafte TCP-Verbindung ermöglicht. Die Go-Sprache bietet Entwicklern integrierte Unterstützung für WebSocket und macht die bidirektionale Kommunikation einfach und unkompliziert.

Erstellen eines WebSocket-Servers

Das Erstellen eines WebSocket-Servers erfordert drei Schritte:

  1. Verwenden Sie das Paket net/http, um die Funktion http.Handler zu erstellen kümmert sich um die WebSocket-Verbindung. net/http 包创建 http.Handler 函数,该函数处理 WebSocket 连接。
  2. 创建 websocket.Upgrader 结构体,该结构体将 HTTP 请求升级为 WebSocket 连接。
  3. 使用 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 客户端同样需要三步:

  1. 使用 net/http 包创建 http.Request,并设置 "Upgrade: WebSocket" 头。
  2. 创建 websocket.Dialer 结构体,该结构体用于建立 WebSocket 连接。
  3. 使用 Dial
  4. Erstellen Sie eine websocket.Upgrader-Struktur, die HTTP-Anfragen auf WebSocket-Verbindungen aktualisiert.

Verwenden Sie die Methode http.ServeHTTP, um den WebSocket-Server zu starten.

🎜
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))
    }
}
🎜🎜Erstellen eines WebSocket-Clients🎜🎜🎜Das Erstellen eines WebSocket-Clients erfordert außerdem drei Schritte: 🎜🎜🎜Verwenden Sie das net/http-Paket, um http.Request zu erstellen und Legen Sie den Header "Upgrade: WebSocket" fest. 🎜🎜Erstellen Sie die Struktur websocket.Dialer, die zum Herstellen einer WebSocket-Verbindung verwendet wird. 🎜🎜Verwenden Sie die Methode Wählen, um eine Verbindung herzustellen. 🎜🎜rrreee🎜Mit diesen Schritten können Sie ganz einfach die bidirektionale WebSocket-Kommunikation in Go implementieren und Ihren Anwendungen Echtzeit-Interaktionsfunktionen hinzufügen. 🎜

Das obige ist der detaillierte Inhalt vonWie implementiert Go WebSocket die bidirektionale Kommunikation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn