Golang で WebSocket の双方向通信を実装する方法
WebSocket は、クライアントとサーバーの間に永続的な接続を確立する通信プロトコルです。リアルタイムのパフォーマンスと効率の点で優れたパフォーマンスを発揮します。 Golang では、標準ライブラリの net/http
および gorilla/websocket
パッケージを使用して、WebSocket 双方向通信を実装できます。この記事では、Golang で WebSocket 双方向通信を実装する方法と具体的なコード例を紹介します。
ステップ 1: 依存関係パッケージをインポートする
まず、net/http
および gorilla/websocket
パッケージをインポートする必要があります。 net/http
パッケージは HTTP サーバーおよびクライアント機能を提供し、gorilla/websocket
パッケージは WebSocket 実装ライブラリです。
import ( "log" "net/http" "github.com/gorilla/websocket" )
ステップ 2: WebSocket 処理関数を設定する
次に、WebSocket 処理関数を設定する必要があります。この関数はクライアントの接続要求を処理し、接続が正常に確立された後にクライアントから送信されたメッセージを処理します。
func websocketHandler(w http.ResponseWriter, r *http.Request) { // 将 HTTP 连接升级为 WebSocket 连接 ws, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println("Error upgrading HTTP connection to WebSocket:", err) return } // 在连接结束时关闭 WebSocket defer ws.Close() // 循环处理客户端发来的消息 for { // 读取客户端发来的消息 messageType, message, err := ws.ReadMessage() if err != nil { log.Println("Error reading message from WebSocket:", err) break } // 打印收到的消息 log.Printf("Received message: %s", message) // 回复客户端收到的消息 if err = ws.WriteMessage(messageType, message); err != nil { log.Println("Error writing message to WebSocket:", err) break } } }
ステップ 3: WebSocket アップグレーダーを設定する
処理関数では、gorilla/websocket# のアップグレーダー (
upgrader) を使用する必要があります。 ## HTTP 接続を WebSocket 接続にアップグレードするパッケージ。アップグレーダーは、許可されたドメインやハンドシェイク タイムアウトなどのいくつかのパラメーターを設定することもできます。
var upgrader = websocket.Upgrader{ // 允许跨域访问 CheckOrigin: func(r *http.Request) bool { return true }, }
func main() { // 设置 WebSocket 处理函数 http.HandleFunc("/", websocketHandler) // 启动 HTTP 服务器 err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("Error starting HTTP server:", err) } }
:8080 は、サーバーのリスニング アドレスとポート番号です。必要に応じて変更できます。
const socket = new WebSocket("ws://localhost:8080/"); socket.addEventListener("open", (event) => { socket.send("Hello, server!"); }); socket.addEventListener("message", (event) => { console.log("Received message from server:", event.data); }); socket.addEventListener("close", (event) => { console.log("Server connection closed:", event); });
以上がGolangでWebSocket双方向通信を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。