私はGoでエレベーター用のサーバーを作っていますが、TCP接続でゴルーチンとして "ハンドラー"という関数を実行しています。 接続から読み取る必要があり、一定の時間内に信号が検出されない場合はエラーを返すようにします。どのようにしてnet.Readをゴランの入力待ちにすることができますか?
限り、私はそれがうまく動作しているようだ接続上のものを送信するクライアントを持っていますが、できるだけ早くクライアントが停止するようnet.Read機能を送信することは、エラーEOFを返し、全く遅延なしでループを開始するようfunc handler(conn net.Conn){
conn.SetReadTimeout(5e9)
for{
data := make([]byte, 512)
_,err := conn.Read(data)
}
}
。
これは、読み取りが正常に動作するはずですが、何かを読み取るたびに接続を閉じて開いていなくても、別の方法で問題を処理することを提案できますか?
conn.SetReadTimeout(5E9 )あなたが望むものではありません。 SetReadTimeoutは、継続時間ではなく絶対時間を求めます。 "time.Seconds * 10"と指定してみると、コンパイラは不平を言うでしょう。上記のことは、1970年1月1日以降に接続がタイムアウトになることを望んでいることです。したがって、まったく待ちません。代わりに、conn.SetReadTimeout(time.Now()。Add(time.Seconds * 10))の効果を10秒間のタイムアウトにする必要があります。 – Crunge