Golang WebSocket の例: 単純なチャット アプリケーションの構築
インターネットの発展に伴い、リアルタイム コミュニケーションがますます注目を集めています。リアルタイム通信プロトコルとして、WebSocket はクライアントとサーバーの間に永続的な接続を確立し、双方向のリアルタイム データ送信を可能にします。この記事では、Golang を使用して、WebSocket 経由でリアルタイム メッセージを送受信する簡単なチャット アプリケーションを構築する方法を紹介します。
開始する前に、Golang 開発環境がコンピュータに正しくインストールされていることを確認してください。
まず、Golang で一般的に使用される WebSocket ライブラリである「Gorilla Websocket」パッケージをインポートする必要があります。ターミナルで次のコマンドを使用してインストールします:
go get github.com/gorilla/websocket
次に、main.go ファイルを作成し、必要なパッケージをインポートします:
package main import ( "log" "net/http" "github.com/gorilla/websocket" )
main 関数で、WebSocket プロセッサ関数を定義します。クライアントからの WebSocket 接続リクエストを処理するために使用されます:
func wsHandler(w http.ResponseWriter, r *http.Request) { // 升级HTTP连接为WebSocket连接 conn, err := websocket.Upgrade(w, r, nil, 1024, 1024) if err != nil { log.Println(err) return } // 处理WebSocket连接 for { // 读取客户端发送的消息 _, msg, err := conn.ReadMessage() if err != nil { log.Println(err) break } // 将消息发送给所有连接的客户端 for client := range clients { err := client.WriteMessage(websocket.TextMessage, msg) if err != nil { log.Println(err) client.Close() delete(clients, client) } } } // 关闭WebSocket连接 conn.Close() }
上記のコードでは、まず HTTP 接続を WebSocket 接続にアップグレードし、次に for ループを使用してクライアントから送信されたメッセージを継続的に受信します。メッセージは接続されているすべてのクライアントに送信されます。エラーが発生したり、クライアントが切断されたりすると、対応する接続が閉じられます。
次に、接続されているすべてのクライアントを保存するためにグローバル変数 client を定義する必要があります:
var clients = make(map[*websocket.Conn]bool)
次に、main 関数のコードを変更し、WebSocket プロセッサ関数を「/ws」で接続します。パスを関連付けて HTTP サーバーを起動します:
func main() { http.HandleFunc("/ws", wsHandler) err := http.ListenAndServe(":8000", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } }
最後に、ブラウザまたは WebSocket クライアント ツールを使用してチャット アプリケーションをテストできます。ブラウザに「http://localhost:8000」と入力し、コンソールを開き、次の JavaScript コードを実行します。
var ws = new WebSocket("ws://localhost:8000/ws"); // 连接建立时触发的事件 ws.onopen = function() { console.log("连接成功"); }; // 收到消息时触发的事件 ws.onmessage = function(evt) { console.log("收到消息:" + evt.data); }; // 发送消息 ws.send("Hello, World!");
上記のコードを通じて、サーバーから「Hello, World!」を受信します。というメッセージをコンソールに出力します。
これまでのところ、Golang と WebSocket を使用してリアルタイム メッセージを送受信する単純なチャット アプリケーションを構築することに成功しました。もちろん、これは単なる基本的な例であり、ニーズに応じて拡張および最適化できます。この記事があなたのお役に立てば幸いです。また、Golang と WebSocket を使用したリアルタイム通信アプリケーションの開発がさらに成功することを願っています。
以上がgolang WebSocket の例: 単純なチャット アプリケーションの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。