Golang でクロスプラットフォーム通信に WebSocket を使用する方法

WBOY
リリース: 2023-12-18 12:09:19
オリジナル
693 人が閲覧しました

Golang でクロスプラットフォーム通信に WebSocket を使用する方法

WebSocket は、Web ブラウザとサーバー間のリアルタイムの双方向通信に使用されるテクノロジです。これは、データを送受信するための信頼性の高い方法を提供し、従来の HTTP 要求/応答メカニズムよりも効率的かつ高速です。 golang では、サードパーティのライブラリを使用して WebSocket 通信をサポートできます。この記事では、gorilla/websocket ライブラリを使用して WebSocket 通信を実装する方法と、具体的なコード例を紹介します。

  1. ゴリラ/WebSocket ライブラリのインストール

go get コマンドを使用して、ゴリラ/WebSocket ライブラリを簡単にインストールできます:

go get github.com/gorilla/websocket
ログイン後にコピー
  1. WebSocket の作成connection

サーバー側で、ゴリラ/WebSocket ライブラリの Upgrader 関数を使用して、HTTP 接続を WebSocket 接続にアップグレードします。コードは次のとおりです。

import (
    "net/http"

    "github.com/gorilla/websocket"
)

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

func myHandler(w http.ResponseWriter, r *http.Request) {
    // 将HTTP连接升级为WebSocket连接
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        // 处理错误
        return
    }

    // 处理WebSocket连接
    for {
        // 读取消息
        messageType, p, err := conn.ReadMessage()
        if err != nil {
            // 处理错误
            return
        }

        // 处理消息
        err = conn.WriteMessage(messageType, p)
        if err != nil {
            // 处理错误
            return
        }
    }
}

func main() {
    http.HandleFunc("/", myHandler)
    http.ListenAndServe(":8080", nil)
}
ログイン後にコピー

クライアント側では、JavaScript コードを使用して WebSocket 接続を作成できます。コードは次のとおりです。

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

ws.onopen = function() {
    console.log("WebSocket连接已打开");
};

ws.onmessage = function(evt) {
    console.log("接收到消息: " + evt.data);
};

ws.onclose = function() {
    console.log("WebSocket连接已关闭");
};
ログイン後にコピー
  1. メッセージの送受信

サーバー側では、WriteMessage 関数を使用してクライアントにメッセージを送信できます。コードは次のとおりです。

err := conn.WriteMessage(websocket.TextMessage, []byte("Hello, client!"))
if err != nil {
    // 处理错误
    return
}
ログイン後にコピー

クライアントでは、send 関数を使用してメッセージを送信し、onmessage 関数を使用してメッセージを受信できます。コードは次のとおりです。

ws.send("Hello, server!");

ws.onmessage = function(evt) {
    console.log("接收到消息: " + evt.data);
};
ログイン後にコピー
  1. WebSocket リクエストの処理

実際のアプリケーションでは、WebSocket リクエストを処理するときに認証と認可を実行する必要がある場合があります。この場合、HTTP ヘッダーを使用して認証情報を渡すことができます。たとえば、次のような情報を HTTP ヘッダーに追加できます。

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
ログイン後にコピー

次に、サーバー側で、Upgrader 関数の CheckOrigin オプションを使用して、WebSocket リクエストの送信元を確認し、リクエストを処理するための HTTP ヘッダー情報内の認証。具体的なコードは次のとおりです。

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool {
        // 检查请求的来源
        if r.Header.Get("Origin") != "http://localhost:8080" {
            return false
        }

        // 检查认证信息
        if r.Header.Get("Authorization") != "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" {
            return false
        }

        return true
    },
}

func myHandler(w http.ResponseWriter, r *http.Request) {
    // 将HTTP连接升级为WebSocket连接
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        // 处理错误
        return
    }

    // 处理WebSocket连接
    for {
        // 读取消息
        messageType, p, err := conn.ReadMessage()
        if err != nil {
            // 处理错误
            return
        }

        // 处理消息
        err = conn.WriteMessage(messageType, p)
        if err != nil {
            // 处理错误
            return
        }
    }
}
ログイン後にコピー
  1. 概要

この記事では、golang でゴリラ/WebSocket ライブラリを使用して WebSocket 通信を実装する方法を紹介し、具体的なコード例を示します。 。 WebSocket テクノロジーを使用すると、オンライン チャット ルームやマルチプレイヤー ゲームなど、効率的でリアルタイムの双方向通信アプリケーションを構築できます。実際のアプリケーションでは、認証と認可、例外の処理などのセキュリティと信頼性の問題も考慮する必要があります。

以上がGolang でクロスプラットフォーム通信に WebSocket を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート