1
GO経由でWebsocket接続を作成します。この接続は明確に定義されたパターンに従います。クライアントは、接続を作成した直後に自分自身を「認証」(データ入力)する必要があります。クライアントがそれをしない場合、接続は短期間で終了します。タイムアウトでメッセージを待っているWebsocket
現在のコードには、この初期タイムアウト(initTimeout)とすべての接続の最大タイムアウトが含まれています。これらのタイマーは簡単にチェックすることができますが、実行をブロックするメッセージを待ってタイマーを組み合わせる方法がわかりません。
ws, err := upgrader.Upgrade(w, r, nil)
initTimeout := time.NewTicker(time.Duration(30) * time.Second)
maxTimeout := time.NewTicker(time.Duration(45) * time.Minute)
for {
select {
case <- initTimeout.C:
ws.WriteMessage(websocket.TextMessage, []byte("No input received"))
ws.Close()
case <- maxTimeout.C:
ws.WriteMessage(websocket.TextMessage, []byte("Maximum timeout"))
ws.Close()
default:
mt, message, err := c.ReadMessage()
// will this block the timers?
}
}