phpエディタのいちごが「Go: ResponseControllerの期限を守らない」について紹介します。ソフトウェア開発では、ResponseController は応答要求を処理するために使用される一般的なコントローラーです。ただし、開発者がコードを記述するときに ResponseController の期限を遵守しない場合があり、これにより一連の問題が発生する可能性があります。この記事では、この問題を詳しく調査し、コードの信頼性と安定性を確保するための解決策を提供します。
書き込みに時間がかかりすぎる場合に、クライアントへの書き込みをキャンセルしようとするコードがいくつかあります。 http.responsecontroller には setwritedeadline メソッドがあるので、これを使用できると思います。
残念ながら、以下のコードでは、rw.write
は期限が過ぎてもエラーを返しません。
書き込みをキャンセルする他の方法はありますか?
リーリー リーリーpackage main import ( "log" "net/http" "time" ) func main() { http.handlefunc("/", func(rw http.responsewriter, r *http.request) { log.println(r.method, r.url.path) rc := http.newresponsecontroller(rw) dl := time.now().add(3 * time.second) if err := rc.setwritedeadline(dl); err != nil { log.println(err) return } log.println("write deadline:", dl) var total int for _, b := range []byte("what!\n") { time.sleep(time.second) n, err := rw.write([]byte{b}) if err != nil { log.println(err) return } total += n log.println("bytes written", n) } log.println(r.method, r.url.path, "write total", total) }) http.listenandserve(":8080", nil) }
setwritedeadline 応答を書く期限を設定します。期限が過ぎた後の応答本文の書き込みはブロックされませんが、データがバッファリングされている場合は成功する可能性があります。
アプリケーションによって書き込まれた少量のデータがバッファリングされるため、質問内の応答ライターへの書き込みは成功します。
カールからの「サーバーからの空の応答」エラーは、サーバーがハンドラーから戻ったときに基礎となるネットワーク接続への応答をフラッシュするときに期限が遵守されることを示します。
setwritedeadline を使用して、クライアントの速度低下を防ぎます。
期限付きのコンテキストを使用して、サーバーが応答を生成するのにかかる時間を制限します: 65bd46fc4 2月
以上がGo: ResponseController の期限が守られないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。