Go 言語を使用して Websocket チャット ルームを開発する方法
Websocket は、サーバーとクライアント間の双方向通信を可能にするリアルタイム通信プロトコルです。接続。 。 Websocket は、リアルタイムのメッセージ交換を可能にし、効率的なパフォーマンスを提供するため、チャット ルームを開発する場合に非常に良い選択肢です。この記事では、Go 言語を使用して簡単な Websocket チャット ルームを開発する方法と、いくつかの具体的なコード例を紹介します。
1. 準備作業
1. Go 言語環境のインストール
始める前に、まず Go 言語環境をインストールする必要があります。 Go 言語の公式 Web サイト (https://golang.org/) では、各プラットフォーム用のインストール パッケージが提供されており、ご使用のオペレーティング システムに応じてダウンロードしてインストールできます。
2. WebSocket ライブラリをインストールする
Go 言語では、「github.com/gorilla/websocket」パッケージを使用して WebSocket 関連の機能を提供します。次のコマンドでパッケージをインストールできます:
go get github.com/gorilla/websocket
2. チャット ルーム サーバーを作成します
最初に、チャット ルーム サーバーを作成する必要があります。 Websocket 接続の確立とメッセージの送受信を処理するために使用される単純なサーバー。
package main import ( "fmt" "log" "net/http" "github.com/gorilla/websocket" ) var clients = make(map[*websocket.Conn]bool) // 存储连接的客户端 var broadcast = make(chan Message) // 消息广播通道 // 定义消息结构体 type Message struct { Username string `json:"username"` Message string `json:"message"` } func main() { http.HandleFunc("/ws", handleConnections) go handleMessages() // 启动服务器 log.Println("服务器启动,监听端口:8080") err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } } func handleConnections(w http.ResponseWriter, r *http.Request) { // 升级HTTP连接为Websocket连接 ws, err := websocket.Upgrade(w, r, nil, 1024, 1024) if err != nil { log.Fatal(err) } // 关闭连接 defer ws.Close() // 将客户端连接添加到clients映射中 clients[ws] = true for { var msg Message // 读取客户端发送的消息 err := ws.ReadJSON(&msg) if err != nil { log.Printf("读取消息错误:%v", err) delete(clients, ws) break } // 将接收到的消息放入广播通道中 broadcast <- msg } } func handleMessages() { for { // 从广播通道中读取消息 msg := <-broadcast // 遍历所有连接的客户端,将消息发送给每个客户端 for client := range clients { err := client.WriteJSON(msg) if err != nil { log.Printf("发送消息错误:%v", err) client.Close() delete(clients, client) } } } }
上記のコードは、単純な Websocket チャット ルーム サーバーを作成します。 handleConnections
関数では、受信したメッセージをブロードキャスト チャネルに入れます。 handleMessages
関数はブロードキャスト チャネルからメッセージを読み取り、接続されているすべてのクライアントにメッセージを送信します。
3. フロントエンド インターフェイスの作成
次に、ユーザーがユーザー名とメッセージを入力し、チャット コンテンツをリアルタイムで表示するためのフロントエンド インターフェイスを作成する必要があります。
<!doctype html> <html> <head> <title>Websocket 聊天室</title> <style> #message-box { height: 500px; overflow-y: scroll; } </style> </head> <body> <h1>Websocket 聊天室</h1> <div id="message-box"></div> <form id="message-form" onsubmit="sendMessage(event)"> <input type="text" id="username" placeholder="请输入用户名" required> <br /> <input type="text" id="message" placeholder="请输入消息" required> <br /> <button type="submit">发送</button> </form> <script> const socket = new WebSocket("ws://localhost:8080/ws"); socket.onmessage = function (event) { const data = JSON.parse(event.data); const messageBox = document.getElementById("message-box"); const messageElement = document.createElement("p"); messageElement.innerText = data.username + ": " + data.message; messageBox.appendChild(messageElement); }; function sendMessage(event) { event.preventDefault(); const username = document.getElementById("username").value; const message = document.getElementById("message").value; const data = { username: username, message: message }; socket.send(JSON.stringify(data)); document.getElementById("message").value = ""; } </script> </body> </html>
上記のコードは、ユーザー名入力ボックス、メッセージ入力ボックス、送信ボタンを含む単純な HTML インターフェイスを作成します。受信したメッセージを socket.onmessage
を通じて処理し、メッセージ ボックスにメッセージを表示します。入力メッセージを socket.send
経由で送信します。
4. プログラムを実行します
ターミナルでプロジェクト ディレクトリに入り、次のコマンドを実行してサーバーを起動します:
go run main.go
次に、index.html を開きます。 # ブラウザの ## ページで、ユーザー名とメッセージを入力し、[送信] をクリックします。
以上がGo言語を使用してWebSocketチャットルームを開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。