ホームページ >バックエンド開発 >Golang >Go でロングポーリング POST リクエストを中止するにはどうすればよいですか?

Go でロングポーリング POST リクエストを中止するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-26 00:23:13824ブラウズ

How Can I Abort Long-Polling POST Requests in Go?

Go でロングポーリングリクエストを中止するためのテクニック

クライアントとサーバーの接続が長期間維持されるロングポーリングのコンテキストでは、クライアント側からリクエストを途中で終了する必要が生じます。 http.Client ライブラリはロングポーリングに対するデフォルトのブロック動作を提供しますが、応答が完全に受信される前に POST リクエストをキャンセルまたは中止するにはどうすればよいでしょうか?

resp.Body を呼び出す従来のアプローチ応答を途中で閉じる .Close() は、別のゴルーチンによる追加のオーケストレーションが必要となるため、推奨されません。さらに、http.Transport のタイムアウト機能の使用は、ユーザーによるキャンセルの必要性と一致しない可能性があります。

幸いなことに、Go エコシステムは、http.Request.WithContext を介してより合理化されたソリューションを提供するように進化しました。これにより、クライアントはリクエストに対して時間制限のあるコンテキストを指定できるようになり、外部イベントに応じて正常に終了できるようになります。以下のコード スニペットは、このアプローチを示しています。

// Create a new request with an appropriate context, using a deadline to terminate after a specific duration.
req, err := http.NewRequest("POST", "http://example.com", nil)
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(5*time.Second))
req = req.WithContext(ctx)
err = client.Do(req)
if err != nil {
    // Handle the error, which may indicate a premature termination due to the context deadline.
}

コンテキスト オブジェクトで cancel() を呼び出すことで、いつでもリクエストを中止し、ロング ポーリングの終了をトリガーできます。これにより、ユーザー制御による HTTP POST リクエストのキャンセルのための信頼性が高く効率的なメカニズムが提供されます。

以上がGo でロングポーリング POST リクエストを中止するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。