ホームページ  >  記事  >  バックエンド開発  >  GolangでWebSocket双方向通信を実装する方法

GolangでWebSocket双方向通信を実装する方法

WBOY
WBOYオリジナル
2023-12-18 16:06:421282ブラウズ

GolangでWebSocket双方向通信を実装する方法

Golang で WebSocket の双方向通信を実装する方法

WebSocket は、クライアントとサーバーの間に永続的な接続を確立する通信プロトコルです。リアルタイムのパフォーマンスと効率の点で優れたパフォーマンスを発揮します。 Golang では、標準ライブラリの net/http および gorilla/websocket パッケージを使用して、WebSocket 双方向通信を実装できます。この記事では、Golang で WebSocket 双方向通信を実装する方法と具体的なコード例を紹介します。

ステップ 1: 依存関係パッケージをインポートする

まず、net/http および gorilla/websocket パッケージをインポートする必要があります。 net/http パッケージは HTTP サーバーおよびクライアント機能を提供し、gorilla/websocket パッケージは WebSocket 実装ライブラリです。

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

ステップ 2: WebSocket 処理関数を設定する

次に、WebSocket 処理関数を設定する必要があります。この関数はクライアントの接続要求を処理し、接続が正常に確立された後にクライアントから送信されたメッセージを処理します。

func websocketHandler(w http.ResponseWriter, r *http.Request) {
    // 将 HTTP 连接升级为 WebSocket 连接
    ws, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println("Error upgrading HTTP connection to WebSocket:", err)
        return
    }

    // 在连接结束时关闭 WebSocket
    defer ws.Close()

    // 循环处理客户端发来的消息
    for {
        // 读取客户端发来的消息
        messageType, message, err := ws.ReadMessage()
        if err != nil {
            log.Println("Error reading message from WebSocket:", err)
            break
        }

        // 打印收到的消息
        log.Printf("Received message: %s", message)

        // 回复客户端收到的消息
        if err = ws.WriteMessage(messageType, message); err != nil {
            log.Println("Error writing message to WebSocket:", err)
            break
        }
    }
}

ステップ 3: WebSocket アップグレーダーを設定する

処理関数では、gorilla/websocket# のアップグレーダー (upgrader) を使用する必要があります。 ## HTTP 接続を WebSocket 接続にアップグレードするパッケージ。アップグレーダーは、許可されたドメインやハンドシェイク タイムアウトなどのいくつかのパラメーターを設定することもできます。

var upgrader = websocket.Upgrader{
    // 允许跨域访问
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}

ステップ 4: HTTP サーバーをセットアップする

最後に、クライアントが WebSocket に接続できるように、HTTP サーバーをセットアップし、処理関数を対応するパスにマップする必要があります。パス。コード例の

func main() {
    // 设置 WebSocket 处理函数
    http.HandleFunc("/", websocketHandler)

    // 启动 HTTP 服务器
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("Error starting HTTP server:", err)
    }
}

:8080 は、サーバーのリスニング アドレスとポート番号です。必要に応じて変更できます。

上記のコードを使用して、WebSocket を介した双方向通信の機能を Golang に実装することに成功しました。クライアント接続が成功したら、次のようなコードを使用してメッセージを送受信できます。

const socket = new WebSocket("ws://localhost:8080/");

socket.addEventListener("open", (event) => {
    socket.send("Hello, server!");
});

socket.addEventListener("message", (event) => {
    console.log("Received message from server:", event.data);
});

socket.addEventListener("close", (event) => {
    console.log("Server connection closed:", event);
});

要約すると、Golang で WebSocket 双方向通信を実装する方法を詳しく紹介し、具体的なコードを提供しました。例。これらのサンプル コードを通じて、WebSocket に基づくリアルタイム通信機能をすぐに開始し、実装することができます。

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

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