リクエストをキャンセルすることは可能ですか (私はそれが通常のことだと思います) (このリクエストの後にサーバー上で既に開始されているメソッドも)?
たとえば、Rails アプリから youtube または vimeo でのビデオ検索をリクエストしたとします (これはサーバーに実装されており、vimeo または youtube に直接リクエストを送信します)。しかし、この検索をキャンセルすることにしたので、新しい検索を開始できます。すでに役に立たない検索結果のためにリソースを浪費することはありません。したがって、すべてのリクエストは AJAX 経由で行われます。
私はすべきだと思います:
グローバル変数を定義します(たとえば
cancel_req = 4939498348953
、キャンセルするたびに、キャンセルしたいメソッドに知られている特定の ID に設定し、その間は に設定しcancel = nil
ます。したがって、コードのいくつかのポイントで、この変数をチェックするだけです(ただし、非常に多くのデータが返されるため、サードパーティの API 呼び出しが非常に長い時間ブロックされている場合は?)またはredisサブスクライブを導入します(このタスクには少し過剰に設計されていると思います)
しかし、どちらの方法も単なる回避策のように思えます。cancel
独自のソリューションでサードパーティの API を要求するなど、これらの長時間実行されるメソッドに到達するためのより良い方法はありますか?
アップデート:
でレールで何とか可能callbacks
ですか?たぶんyield
sと?
アップデート2:
ワークフローは次のとおりです。
client -> webserver -> rails-app-server (controller/helper) --->
|
foreignAPI // <-- break execution somewhere here (but of course still handle all other client requests, so - not exiting the application)
|
client <- webserver <- rails-app-server (controller/helper) <--