ホームページ  >  記事  >  バックエンド開発  >  Golang で WebSocket を使用してリアルタイムのデータ更新を行う方法

Golang で WebSocket を使用してリアルタイムのデータ更新を行う方法

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

Golang で WebSocket を使用してリアルタイムのデータ更新を行う方法

Golang で WebSocket を使用してリアルタイム データ更新を行う方法

概要:
WebSocket は、Web ブラウザとサーバー間の全二重通信の方法です。コミュニケーションのために設計されたテクノロジー。 Golang では、標準ライブラリの net/httpgithub.com/gorilla/websocket を使用して WebSocket 機能を実装できます。この記事では、Golang で WebSocket を使用してリアルタイムのデータ更新を行う方法を紹介し、いくつかのコード例を示します。

ステップ:

ステップ 1: HTTP サーバーの作成
まず、WebSocket 接続リクエストを処理する HTTP サーバーを作成する必要があります。簡単なコード例を次に示します。

package main

import (
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, "index.html")
    })

    log.Println("HTTP server is starting at http://localhost:8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

このコードは、ルート パス (「/」) を index.html 静的ファイルというファイルにマップする単純な HTTP サーバーを作成します。

ステップ 2: WebSocket 接続を処理する
次に、WebSocket 接続リクエストを処理できるように HTTP サーバーのコードを変更する必要があります。 github.com/gorilla/websocket ライブラリを使用して、WebSocket 接続を処理できます。変更されたサンプル コードは次のとおりです。

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

var (
    upgrader = websocket.Upgrader{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }

    clients = make(map[*websocket.Conn]bool)
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, "index.html")
    })

    http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
        conn, err := upgrader.Upgrade(w, r, nil)
        if err != nil {
            log.Println("Failed to upgrade connection:", err)
            return
        }
        clients[conn] = true

        for {
            _, msg, err := conn.ReadMessage()
            if err != nil {
                log.Println("Failed to read message from client:", err)
                delete(clients, conn)
                break
            }

            for client := range clients {
                err := client.WriteMessage(websocket.TextMessage, msg)
                if err != nil {
                    log.Println("Failed to write message to client:", err)
                    client.Close()
                    delete(clients, conn)
                }
            }
        }
    })

    log.Println("WebSocket server is starting at ws://localhost:8080/ws")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

このコードでは、upgrader オブジェクトを作成し、すべての接続クライアントを保存するための clients 変数を定義します。新しい WebSocket リクエストがある場合、接続を WebSocket 接続にアップグレードし、それを clients 変数に追加します。次に、ループを通じてクライアントからのメッセージを読み取り、接続されているすべてのクライアントにメッセージを送信します。

ステップ 3: フロントエンド ページを作成する
最後に、WebSocket サーバーに接続し、リアルタイムのデータ更新を表示するフロントエンド ページを作成する必要があります。以下は、単純な HTML ページの例 (index.html) です。

<!DOCTYPE html>
<html>

<head>
    <title>WebSocket Demo</title>
</head>

<body>
    <h1>WebSocket Demo</h1>

    <input type="text" id="message-input">
    <button onclick="send()">Send</button>

    <ul id="message-list"></ul>

    <script>
        var socket = new WebSocket("ws://localhost:8080/ws");

        socket.onmessage = function(event) {
            var message = document.createElement("li");
            message.textContent = event.data;
            document.getElementById("message-list").appendChild(message);
        };

        function send() {
            var input = document.getElementById("message-input");
            var message = input.value;
            input.value = "";

            socket.send(message);
        }
    </script>
</body>

</html>

このコードは、WebSocket 接続を作成し、メッセージの到着時に onmessage イベントをリッスンします。 、表示するメッセージを ul 要素に追加します。さらに、ユーザーがメッセージを入力し、WebSocket 経由でサーバーに送信できるように、入力ボックスと送信ボタンが提供されます。

概要:
上記の手順により、Golang で WebSocket を使用してリアルタイムのデータ更新を行うことができます。 HTTP サーバーを作成し、WebSocket 接続を処理し、フロントエンド ページと対話することにより、Web アプリケーションでリアルタイムのデータ通信を実現できます。もちろん、これは単なる例であり、実際の使用時には特定のニーズに応じて拡張や変更が必要になる場合があります。この記事がお役に立てば幸いです。WebSocket の使用が成功することを祈っています。

以上がGolang で WebSocket を使用してリアルタイムのデータ更新を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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