ホームページ > バックエンド開発 > Golang > GolangでWebSocketを使用する方法

GolangでWebSocketを使用する方法

PHPz
リリース: 2023-04-21 14:59:34
オリジナル
959 人が閲覧しました

インターネットの発展に伴い、Web アプリケーションの使用がますます一般的になり、WebSocket プロトコルの人気が高まっています。一方で、Golang の急速な成長により、Golang は WebSocket でよく選ばれる言語になりました。この記事では、WebSocket プログラミングに Golang を使用する方法を紹介します。

WebSocket とは何ですか?

WebSocket プロトコルは、Web アプリケーションがサーバーと対話できるようにする双方向のリアルタイム通信プロトコルです。 HTTP プロトコルとは異なり、WebSocket プロトコルを使用すると、サーバーとクライアントがいつでもメッセージを送受信できるため、リアルタイム通信が可能になります。

一般に、Web アプリケーションは、オンライン チャット、リアルタイム ホットスポット、マルチプレイヤー ゲームなどのリアルタイム データ交換に WebSocket プロトコルを使用します。 WebSocket を使用すると、プログラマは少量のコードで効率的なリアルタイム通信を実現できます。

Golang を使用した WebSocket の実装

Golang は、組み込みの RPC および Socket サポートを提供するため、完璧な言語です。 Golang の net/http パッケージを使用すると、WebSocket サーバーを簡単に作成できます。

    #パッケージのインポート
import (

"log"
"net/http"
"github.com/gorilla/websocket"
ログイン後にコピー
)

    WebSocket ハンドラーの作成
このステップでは、WebSocket リクエストを処理するサーバーを作成します。 WebSocket 接続ごとに、メッセージを読み書きするハンドラーを作成する必要があります。

func websocketHandler(w http.ResponseWriter, r *http.Request) {

ws, err := websocket.Upgrade(w, r, nil, 1024, 1024)
if err != nil {
    log.Println(err)
    return
}
defer ws.Close()

for {
    messageType, p, err := ws.ReadMessage()
    if err != nil {
        log.Println(err)
        break
    }
    log.Println(string(p))
    err = ws.WriteMessage(messageType, []byte("Server: got your message"))
    if err != nil {
        log.Println(err)
        break
    }
}
ログイン後にコピー
}

このハンドラーでは、まず HTTP リクエストを WebSocket 接続にアップグレードします。次に、接続ごとにループしてクライアントから送信されたメッセージを読み取り、コンソールにメッセージを出力します。最後に、メッセージを再度クライアントに書き戻して、メッセージを正常に受信したことをクライアントに知らせます。

    ルーティングのセットアップ
次に、Web Socket ルーティングをサーバーに追加する必要があります。この例では、Gorilla WebSocket ライブラリを使用します。標準ライブラリの代替手段を使用できます。例:

http.HandleFunc("/echo", websocketHandler)

Gorilla WebSocket ライブラリの手動インポートが必要です:

var upgrader = websocket .Upgrader{

ReadBufferSize:  1024,
WriteBufferSize: 1024,
ログイン後にコピー
}

http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {

// Upgrade the HTTP server connection to a web socket connection
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
    log.Println(err)
    return
}

// ... WebSocket connection logic ...
ログイン後にコピー
} )

    サーバーの実行
ルートが設定されたら、

func main() を介してサーバー上で WebSocket 接続を開始できます。 {

log.Println("Starting server on :8080")
http.HandleFunc("/ws", websocketHandler)
err := http.ListenAndServe(":8080", nil)
log.Fatal(err)
ログイン後にコピー
}

これで、サーバーを起動してクライアントに接続できます。新しいターミナル ウィンドウを開き、curl コマンドを使用して WebSocket 経由でサーバーにテキストを送信します。

curl -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: localhost:8080" - H "Origin: http://localhost:8080" http://localhost:8080/ws -v

さらに、Chrome プラグイン Simple WebSocket クライアントなどのオンライン ツールを使用してテストできます。

概要

WebSocket は、リアルタイム通信に最適な選択肢です。 Golang が提供する組み込みの RPC およびソケット サポートを使用すると、WebSocket サーバーを簡単に作成できます。この記事では、Golang を使用して WebSocket を作成する基本的な手順について説明します。 Golang で WebSocket の基本をマスターしたので、独自のリアルタイム アプリケーションの構築を開始できます。

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

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