Golang は効率的でシンプルで習得しやすいプログラミング言語であり、WebSocket は即時通信のための重要なテクノロジです。この記事では、Golang に WebSocket を統合し、ブラウザとのインスタント通信を実装する方法を紹介します。
Web アプリケーション開発において、リアルタイム通信は非常に重要な機能要件です。従来のHTTPプロトコルはステートレスなプロトコルであり、リアルタイム通信を実現できませんでした。その結果、WebSocket が誕生しました。 WebSocket は、クライアントとサーバー間のリアルタイム通信を可能にする全二重通信チャネルを提供する TCP ベースのプロトコルです。
Golang は強力なバックエンド言語として、WebSocket を非常に適切にサポートしています。 Golang の同時実行機能と簡潔な構文を使用すると、WebSocket とブラウザー間の即時通信を簡単に実装できます。
まず、Golang の net/http
パッケージを使用してサーバーを作成する必要があります。以下は簡単なサンプル コードです。
package main import ( "log" "net/http" ) func wsHandler(w http.ResponseWriter, r *http.Request) { // 在这里处理WebSocket的逻辑 } func main() { http.HandleFunc("/", wsHandler) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } }
上記のコードでは、まず WebSocket リクエストを処理する wsHandler
関数を定義し、次に http.HandleFunc
を使用してルートパスに登録します。最後に、http.ListenAndServe
関数を使用して、ポート 8080 でサーバーをリッスンします。
次に、wsHandler
関数で WebSocket ロジックを処理する必要があります。 Golang の net/http
パッケージは、HTTP リクエストを WebSocket 接続にアップグレードするための Upgrade
関数を提供します。 Upgrade
関数を使用して、HTTP 接続を WebSocket 接続にアップグレードできます。
func wsHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer conn.Close() for { // 在这里处理WebSocket的消息 } }
上記のコードでは、まず upgrader.Upgrade
関数を呼び出して、HTTP 接続を WebSocket 接続にアップグレードします。次に、conn
オブジェクトを通じてブラウザと対話します。 conn
オブジェクトを使用すると、WriteMessage
関数を使用してブラウザにメッセージを送信し、ReadMessage
関数を使用してブラウザによって送信されたメッセージを受信できます。
Golang とブラウザ間の WebSocket 通信をデモするには、単純なフロントエンド ページが必要です。以下は、JavaScript で実装された WebSocket クライアントのサンプル コードです。
<!DOCTYPE html> <html> <head> <title>WebSocket Demo</title> <script> var ws = new WebSocket("ws://localhost:8080/"); ws.onopen = function() { // 连接建立后的逻辑 }; ws.onmessage = function(evt) { // 接收到消息后的逻辑 }; ws.onclose = function() { // 连接关闭后的逻辑 }; function sendMessage() { var message = document.getElementById("message").value; ws.send(message); } </script> </head> <body> <input id="message" type="text" /> <button onclick="sendMessage()">发送消息</button> </body> </html>
上記のコードでは、最初に WebSocket オブジェクトを作成し、サーバーのアドレスを指定します。 ws.onopen
関数では、接続が確立された後にロジックを実装できます。##ws.onmessage 関数では、メッセージを受信した後にロジックを実装できます。 #ws .onclose
関数では、接続が閉じられた後のロジックを実装できます。さらに、ユーザーが入力したメッセージをサーバーに送信するための sendMessage
関数も提供します。 4. インスタント メッセージングの実装
func wsHandler(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, message, err := conn.ReadMessage() if err != nil { log.Println(err) break } log.Printf("Received message: %s", message) // 广播消息 for c := range connections { err := c.WriteMessage(messageType, message) if err != nil { log.Println(err) } } } }
上記のコードでは、最初に
conn.ReadMessageFunction を使用します。ブラウザから送信されたメッセージを受信します。次に、接続されているすべてのクライアントをループし、c.WriteMessage
関数を使用してメッセージをブロードキャストします。 5. 概要
パッケージを導入し、簡単なサーバーを作成しました。次に、net/http
パッケージで提供される Upgrade
関数を使用して、HTTP リクエストを WebSocket 接続にアップグレードします。最後に、JavaScript を使用してブラウザーで WebSocket オブジェクトを作成し、接続の確立、メッセージの受信、メッセージの送信のロジックを実装します。 この記事が、Golang でブラウザーとのインスタント通信を実装する方法を理解するのに役立つことを願っています。これに興味がある場合は、メッセージ認証、メッセージ圧縮など、より高度な WebSocket 機能を試すことができます。 Golang と WebSocket を探索する旅がうまくいきますように!
以上がgolang WebSocketとブラウザの統合:即時通信を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。