現代のフロントエンドがリアルタイム性と対話性をますます重視する時代において、WebSocket というネットワーク通信プロトコルの人気が高まっています。使用上、WebSocket と HTTP には類似点がありますが、従来の HTTP リクエストとは異なり、WebSocket は接続を長期間維持できます。 WebSocket を使用して Web アプリケーションを構築することを検討している場合は、それを実装するために何らかのプログラミング言語を使用する必要がある場合があります。中でも Golang は非常に人気のあるプログラミング言語の 1 つであり、Golang で WebSocket を実装する方法を学びましょう。
1.WebSocket とは何ですか?
WebSocket は、単一の TCP 接続上で双方向通信を提供するネットワーク プロトコルです。従来の HTTP プロトコルでは、ブラウザからサーバーにリクエストが送信され、サーバーがそれを処理して結果をブラウザに返します。このプロセスは 1 回限りのプロセスです。リクエストの処理が完了すると、接続が行われます。閉まっている。 WebSocket プロトコルは異なり、ブラウザがサーバーとの接続を確立すると、ユーザーまたはサーバーが接続を閉じるまで接続が維持されます。これは、ブラウザがリクエストを行うのを待たずに、接続が維持されている間、サーバーはいつでもクライアントに情報を送信できることを意味します。
2. Golang は WebSocket を実装します
Golang は、Google によって開発された同時プログラミングをサポートするプログラミング言語で、動作効率とメモリ使用量が非常に少ないことが利点です。ここではGolangを使ってWebSocketを実装する方法を紹介します。
Gorilla WebSocket ライブラリのインストール
Gorilla WebSocket は、WebSocket 接続を作成および処理するためのシンプルで使いやすい API を提供する人気のある WebSocket ライブラリです。 Gorilla WebSocket ライブラリをインストールする前に、まず Go 環境をインストールする必要があります。Go のインストールが完了したら、次のコマンドを使用して Gorilla WebSocket ライブラリをインストールします:
go get github.com/gorilla/websocket
以下では、Go と Gorilla WebSocket ライブラリを使用して、簡単なチャット ルームを実装します。チャット ルームでは、ユーザーはメッセージを送信したり、他のユーザーからのメッセージを表示したりできます。以下は、WebSocket チャット ルームを実装するコードです:
package main import ( "fmt" "log" "net/http" "github.com/gorilla/websocket" ) var clients = make(map[*websocket.Conn]bool) var broadcast = make(chan Message) var upgrader = websocket.Upgrader{} // Message struct type Message struct { Username string `json:"username"` Body string `json:"body"` } func main() { // Configure websocket route http.HandleFunc("/ws", handleConnections) // Start listening for incoming chat messages go handleMessages() // Start the server on localhost port 8080 and log any errors err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } } func handleConnections(w http.ResponseWriter, r *http.Request) { // Upgrade initial GET request to a websocket ws, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Fatal(err) } // Make sure we close the connection when the function returns defer ws.Close() // Register our new client clients[ws] = true for { var msg Message // Read in a new message as JSON and map it to a Message object err := ws.ReadJSON(&msg) if err != nil { log.Printf("error: %v", err) delete(clients, ws) break } // Send the newly received message to the broadcast channel broadcast <- msg } } func handleMessages() { for { // Grab the next message from the broadcast channel msg := <-broadcast // Send it out to every client that is currently connected for client := range clients { err := client.WriteJSON(msg) if err != nil { log.Printf("error: %v", err) client.Close() delete(clients, client) } } } }
コードの主な考え方は、WebSocket 接続を作成し、それを clients
リストと任意のメッセージに追加することです。 broadcast
チャネルに書き込まれ、別の goroutine 内のすべてのクライアントに送信されます。各接続は、Message
オブジェクトを読み取って割り当てることによってメッセージを受信します。クライアントがメッセージを送信するためのサンプル コードは次のとおりです。
let socket = new WebSocket("ws://localhost:8080/ws"); socket.addEventListener("open", function() { socket.send(JSON.stringify({ "username": "John", "body": "Hello World!" })); }); socket.addEventListener("message", function(event) { console.log("Received: " + event.data); });
この例では、最初に WebSocket オブジェクトを作成し、それをサーバーに接続します。接続が成功したら、メッセージ本文として JSON を送信します。サーバーがクライアントにメッセージを送信するときは、クライアントの JavaScript コードで message
イベントをリッスンし、メッセージの受信時に処理する必要があります。
3. 概要
WebSocket はリアルタイム通信の新しい方法を提供し、Web アプリケーションにより多くの対話性とユーザー エクスペリエンスを提供します。 Golang および Gorilla WebSocket ライブラリを使用すると、WebSocket 接続を簡単に実装し、アプリケーションで WebSocket プロトコルを使用できます。
この記事では、簡単なチャット ルームの実装例を紹介します。お役に立てば幸いです。もちろん、WebSocket は他の多くの種類のアプリケーションでも使用できるため、独自のニーズに合わせて調整してください。
以上がGolangでWebSocketを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。