ホームページ  >  記事  >  バックエンド開発  >  WebSocket で Go 言語を使用する方法

WebSocket で Go 言語を使用する方法

PHPz
PHPzオリジナル
2023-06-03 22:31:36911ブラウズ

今日の世界では、ネットワーク通信は不可欠な部分になっています。 WebSocket テクノロジは、Web ブラウザとサーバー間の双方向通信を確立するプロトコルであり、この通信方法は効率的かつリアルタイムであるため、最新の Web アプリケーションでますます普及しています。同時に、Go 言語は並行プログラムの作成の効率性と容易さでも高く評価されています。そこでWebSocketでGo言語をどう使うかが話題になっています。

この記事では、Go 言語を使用して WebSocket をベースとした双方向通信を実装する方法を紹介します。まず WebSocket の基本概念から始め、次に Go 言語を使用して単純な WebSocket サーバーを実装する方法を紹介し、最後に WebSocket 通信をテストするための単純なクライアント プログラムを作成する方法を示します。

1. WebSocket の基本概念

WebSocket は、ブラウザとサーバー間のリアルタイムの双方向通信を可能にする、TCP プロトコルに基づくプロトコルです。これは、一方向の通信プロトコルである HTTP プロトコルとは異なり、ブラウザからサーバーにリクエストが送信され、サーバーからブラウザに応答が送信されます。

WebSocket プロトコルは、接続を頻繁に確立したり閉じたりすることなく、クライアントとサーバー間の接続を開いたままにすることを可能にする永続的なプロトコルです。これにより、WebSocket プロトコルは、オンライン ゲーム、インスタント メッセージング アプリケーション、株式市場相場などのリアルタイム アプリケーションに適したものになります。

WebSocket プロトコルは HTTP 接続上で確立されるプロトコルであり、接続を確立する際、クライアントはサーバーに HTTP リクエストを送信し、リクエスト ヘッダーには「Upgrade」フィールドと「Connection」フィールドが含まれます。これらのフィールドは、クライアントが WebSocket プロトコルへのアップグレードを要求していること、およびサーバーが接続されたままであることをサーバーに伝えます。

サーバーが WebSocket 接続要求を受け入れると、「アップグレード」フィールドと「接続」フィールドが HTTP 応答ヘッダーに含まれ、標準の WebSocket ハンドシェイク応答が提供されます。ハンドシェイクが完了すると、WebSocket 接続が確立されたとみなされ、クライアントとサーバーは双方向で直接通信できるようになります。

WebSocket プロトコルでは、サブプロトコルの使用も許可されています。これは、クライアントとサーバーが特定のプロトコルを使用するようにネゴシエートできることを意味します。サブプロトコルを使用すると、クライアントとサーバーは相互にデータを送信でき、データはそのサブプロトコルのメッセージとして解釈されます。

2. Go 言語を使用して WebSocket サーバーを実装する

Go 言語を使用して WebSocket サーバーを実装するには、 Go言語の標準ライブラリ/net/websocket」パッケージ。

WebSocket 接続リクエストを処理する HTTP 処理関数を作成し、その処理関数を websocker.Handler 関数に登録する必要があります。 HTTP ハンドラー関数は、HTTP 接続を WebSocket 接続にアップグレードし、接続が確立された後にクライアントとサーバー間のメッセージ交換を処理します。

以下は、Go 言語で実装された単純な WebSocket サーバーのサンプル コードです:

package main

import (
    "log"
    "net/http"
    "golang.org/x/net/websocket"
)

func wsHandler(ws *websocket.Conn) {
    var message string
    for {
        err := websocket.Message.Receive(ws, &message)
        if err != nil {
            log.Println("Error receiving message:", err)
            break
        }
        log.Println("Received message:", message)
    }
}

func main() {
    http.Handle("/ws", websocket.Handler(wsHandler))
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

この例では、作成後に Called に接続する「wsHandler」という名前の関数を定義します。この関数は、WebSocket 接続を表す websocket.Conn 型のパラメーターを受け入れます。

wsHandler 関数では、websocket.Message.Receive 関数を使用して WebSocket 接続からメッセージを受信し、そのメッセージをコンソールに出力します。

main 関数では、http.Handle 関数を使用して、「/ws」という名前の WebSocket ハンドラーを HTTP ハンドラーとして登録します。次に、http.ListenAndServe 関数を使用して、サーバーのアドレスとポートを指定してサーバーを実行します。

3. WebSocket 通信をテストするための単純なクライアント プログラムを作成する

WebSocket 接続をテストするために、単純な WebSocket クライアント プログラムを作成できます。このプログラムでは、Go 言語の標準ライブラリの「net/http」パッケージと「golang.org/x/net/websocket」パッケージを使用します。

以下は、Go 言語で実装された単純な WebSocket クライアントのサンプル コードです:

package main

import (
    "fmt"
    "log"
    "golang.org/x/net/websocket"
)

func main() {
    origin := "http://localhost/"
    url := "ws://localhost:8080/ws"
    ws, err := websocket.Dial(url, "", origin)
    if err != nil {
        log.Fatal("Error dialing:", err)
    }
    defer ws.Close()

    message := []byte("Hello, world!")
    _, err = ws.Write(message)
    if err != nil {
        log.Fatal("Error sending message:", err)
    }

    var response []byte
    _, err = ws.Read(response)
    if err != nil {
        log.Fatal("Error receiving response:", err)
    }

    fmt.Println(string(response))
}

この例では、websocket.Dial 関数を使用して WebSocket サーバーとの接続を確立します。 WebSocket サーバーの URL とソース アドレスを指定しました。次に、WebSocket 接続の Write メソッドを使用してバイト配列メッセージを送信できます。次に、WebSocket 接続の Read メソッドを使用して、サーバーから返されたメッセージを読み取り、コンソールにメッセージを出力します。

最後に、プログラムをコンパイルして実行し、WebSocket 接続が正常に確立され、クライアントとサーバー間の通信が確立されることを確認します。

4. 結論

この記事では、WebSocket の基本概念を紹介し、Go 言語を使用して単純な WebSocket サーバーおよびクライアント プログラムを実装する方法を示しました。 WebSocket テクノロジにより、Web アプリケーションはより効率的にリアルタイムの双方向通信を実現できます。また、Go 言語の効率性と並行プログラムの作成の容易さは、WebSocket サーバーを実装するための優れた言語の選択肢となります。

この記事では基本的な知識とサンプル コードのみを紹介しますが、読者はこれらのサンプル コードに基づいてさらに複雑な WebSocket アプリケーションを開発できます。より多くの Web アプリケーションの採用と WebSocket テクノロジの開発により、Go 言語はますます多くの WebSocket サーバーで優先される開発言語になると私は信じています。

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

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