ホームページ >バックエンド開発 >Golang >Go で Websocket を使用してリアルタイム通信を行うにはどうすればよいですか?

Go で Websocket を使用してリアルタイム通信を行うにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-05-11 16:07:411963ブラウズ

Websockets は、Web ブラウザとサーバーの間の双方向通信を確立するテクノロジーで、Web アプリケーションがリアルタイムでクライアントにデータをプッシュできるようにします。たとえば、Websocket を使用してオンライン チャット ルームを実装し、ページを更新せずに Web アプリケーションにリアルタイムのチャット コンテンツを直接表示できます。

この記事では、Go 言語で Websocket を使用してリアルタイム通信を行う方法を紹介します。これを実現するには、Gorilla Websockets ライブラリを使用します。このライブラリは、いくつかの非常に便利なユーティリティ関数とサンプル コードを提供します。

1. Gorilla Websocket のインストール

始める前に、Gorilla Websocket をインストールする必要があります。次のコマンドを使用してインストールできます:

go get github.com/gorilla/websocket

2. Websocket 接続を確立する

次に、Websocket 接続を確立するコードの作成を開始できます。 Websocket 接続を処理するには、HTTP ハンドラー関数を定義する必要があります。以下は簡単なサンプル コードです。

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

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

func handleWebsocket(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }
    defer conn.Close()

    for {
        messageType, p, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            return
        }
        log.Printf("received: %s", p)

        err = conn.WriteMessage(messageType, p)
        if err != nil {
            log.Println(err)
            return
        }
    }
}

func main() {
    http.HandleFunc("/ws", handleWebsocket)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

このサンプル コードでは、Websocket 接続を処理する handleWebsocket 関数を定義します。この関数は、Upgrader を使用して、HTTP ハンドラーを Websockets ハンドラーにアップグレードします。 Upgrader は、接続の読み取りおよび書き込みバッファーのサイズを設定するために使用される、ReadBufferSize や WriteBufferSize などのいくつかのパラメーターを定義する構造体です。

関数では、接続からメッセージを読み取り、ターミナルにメッセージを出力して、クライアントに送り返します。読み取りまたは書き込み中にエラーが発生した場合、接続は中断されます。 main 関数では、handleWebsocket 関数を HTTP プロセッサに登録し、HTTP サーバーを起動します。

3. リアルタイム通信に Websocket を使用する

これで、リアルタイム通信に使用できる単純な Websocket プロセッサを作成できました。次に、Websocket 接続をテストできるように、単純な Web アプリケーションを作成しましょう。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Websockets Example</title>
  </head>
  <body>
    <input id="message-input" type="text" placeholder="Type a message...">
    <button id="send-button">Send</button>
    <ul id="message-list"></ul>
    <script>
      const socket = new WebSocket('ws://localhost:8080/ws');
      socket.addEventListener('message', event => {
        const li = document.createElement('li');
        li.textContent = event.data;
        document.querySelector('#message-list').appendChild(li);
      });
      document.querySelector('#send-button').addEventListener('click', () => {
        const input = document.querySelector('#message-input');
        const value = input.value.trim();
        if (value) {
          socket.send(value);
          input.value = '';
        }
      });
    </script>
  </body>
</html>

このサンプル Web アプリケーションでは、テキスト入力ボックス、送信ボタン、メッセージ リストを含むページを作成します。ユーザーがテキスト ボックスにメッセージを入力し、送信ボタンをクリックすると、Websocket 接続を使用してメッセージがサーバーに送信されます。その後、サーバーはメッセージを送り返し、リストに表示します。新しいメッセージを受信するたびに、新しいリスト項目を作成してリストに追加します。

4. 結論

この記事では、Go で Websocket を使用してリアルタイム通信を行う方法を紹介しました。 Gorilla Websockets ライブラリを使用して Websockets 接続を確立し、接続をテストするための簡単な Web アプリケーションを作成しました。 Websocket は、オンライン チャット ルーム、リアルタイム データ監視およびダッシュボードなど、多くのリアルタイム アプリケーションを実装するために使用できる強力なテクノロジです。この記事がお役に立てば幸いです。

以上がGo で Websocket を使用してリアルタイム通信を行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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