Go 言語を使用して Websocket ハートビート検出を実装する方法
Websocket は、Web アプリケーションで双方向通信を実装するプロトコルであり、サーバーがアクティブにデータをプッシュできるようにします。クライアントへ。高いリアルタイム要件を持つ一部のアプリケーションでは、接続の安定性を確保するためにクライアントのステータスをリアルタイムで監視する必要がある場合があります。この目標を達成するには、ハートビート検出メカニズムを使用します。
この記事では、Go 言語を使用して Websocket ハートビート検出を実装する方法を紹介し、具体的なコード例を示します。
まず、Go 言語の WebSocket パッケージを使用して WebSocket サーバーを作成する必要があります。サーバー側では、github.com/gorilla/websocket
パッケージを使用して WebSocket 通信を実装できます。このパッケージをインストールするには、次のコマンドを使用できます。
go get github.com/gorilla/websocket
Go 言語では、http.ListenAndServe
関数を使用して、単純な WebSocket サーバーを作成できます。以下に例を示します。
package main import ( "fmt" "log" "net/http" "time" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func echo(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer conn.Close() for { // 读取客户端发送的消息 _, msg, err := conn.ReadMessage() if err != nil { log.Println(err) break } // 打印接收到的消息 fmt.Println("Received:", string(msg)) // 回复客户端消息 err = conn.WriteMessage(websocket.TextMessage, []byte("Received: "+string(msg))) if err != nil { log.Println(err) break } } } func main() { http.HandleFunc("/ws", echo) log.Println("WebSocket server started on localhost:8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
この例の echo
関数は、WebSocket 接続を処理し、メッセージの受信と応答を実装するために使用されます。 http.HandleFunc
関数を使用して、この関数をパス /ws
に関連付けることができます。
次に、クライアントにハートビート検出機能を実装する必要があります。 JavaScript の setInterval
関数を使用して、ハートビート メッセージをサーバーに定期的に送信し、一定期間サーバーから応答が受信されない場合に再接続できます。以下は、簡単な JavaScript コードの例です。
var socket = new WebSocket("ws://localhost:8080/ws"); var pingInterval = null; socket.onopen = function() { console.log("Websocket connected"); // 每隔5秒发送心跳消息 pingInterval = setInterval(function() { socket.send("ping"); }, 5000); } socket.onmessage = function(event) { console.log("Received:", event.data); // 收到服务器回复后重置心跳计时器 clearInterval(pingInterval); pingInterval = setInterval(function() { socket.send("ping"); }, 5000); } socket.onclose = function(event) { console.log("Websocket closed"); // 连接关闭后清除心跳计时器 clearInterval(pingInterval); }
この例では、最初に WebSocket 接続を作成し、次に onopen
関数を使用してハートビート タイマーを設定します。 ping
メッセージを 5 秒ごとにサーバーに送信します。サーバーから応答を受信すると、ハートビート タイマーがリセットされます。接続が閉じられると、タイマーがクリアされます。
上記は、Go 言語を使用して WebSocket ハートビート検出を実装するための基本的な手順とコード例です。このようにして、クライアントのステータスをリアルタイムで監視し、接続の安定性を確保できます。この記事があなたのお役に立てば幸いです!
以上がGo言語を使用してWebsocketハートビート検出を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。