ホームページ  >  記事  >  バックエンド開発  >  Go WebSocket はどのように双方向通信を実装しますか?

Go WebSocket はどのように双方向通信を実装しますか?

WBOY
WBOYオリジナル
2024-06-05 21:38:001074ブラウズ

Go 言語には WebSocket のサポートが組み込まれており、次の手順で双方向通信を実現できます: WebSocket サーバーを作成する: HTTP ハンドラー関数を作成します。 HTTP リクエストをアップグレードするための Upgrader 構造を作成します。 WebSocketサーバーを起動します。 WebSocket クライアントの作成: HTTP リクエストを作成し、WebSocket ヘッダーを設定します。ダイヤラ構造を作成します。接続を確立するには、Dial メソッドを使用します。

Go WebSocket 如何实现双向通信?

Go WebSocket: 双方向通信を可能にする

WebSocket は、単一の永続的な TCP 接続を介してクライアントとサーバーの間でリアルタイムのデータ交換を可能にする双方向通信プロトコルです。 Go 言語は開発者に WebSocket の組み込みサポートを提供し、双方向通信をシンプルかつ簡単にします。

WebSocket サーバーの作成

WebSocket サーバーの作成には 3 つの手順が必要です:

  1. net/http パッケージを使用して http.Handler 関数を作成します。 WebSocket接続を処理します。 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. HTTP リクエストを WebSocket 接続にアップグレードする websocket.Upgrader 構造を作成します。

http.ServeHTTP メソッドを使用して 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))
    }
}
🎜🎜WebSocket クライアントの作成🎜🎜🎜WebSocket クライアントの作成には 3 つの手順も必要です: 🎜🎜🎜net/http パッケージを使用して http.Request を作成し、 "Upgrade: WebSocket" ヘッダーを設定します。 🎜🎜WebSocket 接続を確立するために使用される websocket.Dialer 構造体を作成します。 🎜🎜Dial メソッドを使用して接続を確立します。 🎜🎜rrreee🎜これらの手順を使用すると、Go で WebSocket 双方向通信を簡単に実装し、アプリケーションにリアルタイムの対話機能を追加できます。 🎜

以上がGo WebSocket はどのように双方向通信を実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。