2012-03-19 10 views
0

私はこの問題は、私がクライアントに何かを送信するとき、私は唯一のクライアントの切断を検出できることであるASP.NETポーリングせずにASP.NETで切断が発生したらすぐに切断を検出する方法はありますか?

Response.ContentType = "text/event-stream"; 
while (true) 
{ 
    if(thereIsAMessage) 
    { 
     Response.Write(message); 
     Response.Flush(); 
     if (Response.IsClientConnected == false) 
     { 
      break; 
     } 
    } 

    System.Threading.Thread.Sleep(1000); 
} 

server-sent eventsハンドラを持っています。そして、私はそれをポーリングしたくありません。これは、最初にServer-sentイベントを使用するという全目的を破っています。

+0

スリープ(...)機能の後にisClientConnected()チェックを入れることができます。 「プールしたくない」とどういう意味ですか? – ZippyV

+0

@ ZippyV 'Response.IsClientConnected'がどこにチェックされていても問題ありません。私は、スリープメソッド呼び出し後にそれを入れてみました。 –

+0

@ ZippyV空のメッセージを送信しているクライアントをプールして、まだ生存しているかどうかをチェックしません。 –

答えて

2

を参照してください。SignalRを参照してください。長いポーリングに便利です。サーバー通知は実装するのが難しくありません。使用可能な場合はWebSocketを使用します。あなたのシナリオは、ハブを使って非常に簡単に実装できます。

+0

パッケージ 'Microsoft.WebSockets 0.2.1'をインストールできませんでした。このパッケージを '.NETFramework、Version = v4.0'を対象とするプロジェクトにインストールしようとしていますが、そのフレームワークと互換性のあるアセンブリ参照はパッケージに含まれていません。詳細については、パッケージ作成者にお問い合わせください。 –

+0

Nugetを使用してインストールしていますか? –

+0

はい、ありがとうございます。私にそのメッセージを伝えるのはナゲットです。ターゲットフレームワークのバージョンを変更しようとしましたが、無駄です。 –

0

あなたがあなた自身のコードで行いたい場合は、単にあなたの例を変更することができます。

Response.ContentType = "text/event-stream"; 
while (Response.IsClientConnected) 
{ 
    if(thereIsAMessage) 
    { 
     Response.Write(message); 
     Response.Flush(); 
    } 

    System.Threading.Thread.Sleep(1000); 
} 

しかし、それでもまだ、私は、このアプローチを使用してのThread.sleep最適な実装であるか分かりません。

関連する問題