1

ASP.NETで記述されたCometアプリケーションに取り組んでいます。アクティブな接続コンテキストの配列(HttpContext)があります。また、コレクションを定期的に繰り返し、その状態を確認する必要があるスレッドがあります。したがって、アプリケーションアーキテクチャはリクエストごとのスレッドではありません。

接続がアクティブである(リモートホストによって閉じられていない)ことを確認するための最良の方法は何ですか?

私はこれを見つけました:

context.Response.Write(' ');
context.Response.Flush();

if (!context.Response.IsClientConnected)
{
    // ...
}

ただし、処理にスレッド時間がかかるため、これは適切なソリューションではありません(Flush()が操作をブロックしています)。多くの同時接続で非常に高速に動作し、ブロッキング操作を使用しないソリューションが必要です。

たぶん、この方法で接続を監視できるIISまたはASP.NET機能がいくつかありますか?

4

1 に答える 1

2

短い答えは... いいえ。ASP.NET が IsClientConnected に対して false を返すことを認識する唯一の方法は、ユーザーがサーバーに対して別の呼び出しを行った場合、または Response.Close が以前に呼び出された場合です。私の経験では、ユーザーが接続を閉じても IsClientConnected が true を返す可能性は十分にあります。進行中の基礎となる HTTP 通信について考えてみれば、その理由がわかります。

何を達成しようとしていますか?

于 2009-04-18T11:18:45.220 に答える