私は、ユーザがmongoデータベースに対して地理空間クエリを実行しているアプリケーションを持っています。クエリは何千もの結果を返すことができます(〜50k)。これらの結果は、websocketを介してクライアントにストリーミングされます。ただし、ユーザーは結果の中間結果を中止して新しいクエリを実行できます。ユーザーは頻繁に1分間に数回のオーダでリクエストを開始、中止、再開します。場合によっては数秒ごとにキャンセル/再起動することもあります。実行中のクエリをキャンセルします
質問は、ユーザーがリクエストを打ち切ったときに、サーバー上でクエリを取り消して、何千もの不要な結果をストリーミングするリソースを引き留めないようにするにはどうすればいいですか?私は現在カーソル上でdestroy()
と呼んでいますが、これが実際にサーバ上で実行されているクエリを停止していることは明らかではありません。
この場合、どのようなベストプラクティスですか?
websocketを介してクライアントに結果を送信するのをキャンセルするコードが既に用意されています(あなたの提案に非常に似ています)。私の質問は、MongoDBレイヤーでクエリの実行をキャンセルしてからクライアントに結果をストリーミングすることに本当に特有のものです。 – herbrandson
@herbrandson - あなたが話している特定のデータベースコードと、すべてが実行されるときを制御するシーケンシングコードを表示します。コードに関する質問には、関連コードを含める必要があります。 – jfriend00