2012-03-19 53 views
0

我有一個server-sent events處理在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); 
} 

的問題是,我只能檢測客戶端斷開連接時,我送點東西給客戶端。我不想調查它,這首先打敗了使用服務器發送事件的整個目的。

+0

您可以在Sleep(...)函數之後執行isClientConnected()檢查。你是什​​麼意思「不想集中它」? – ZippyV 2012-03-20 14:19:28

+0

@ZippyV它沒有關係,在哪裏檢查Response.IsClientConnected。我試圖把它放在睡眠方法調用後無濟於事。 – 2012-03-20 19:43:14

+0

@ZippyV我不想讓發送空郵件的客戶端只是爲了檢查它是否還活着。 – 2012-03-20 19:43:44

回答

2

嘗試查看SignalR - 對於長輪詢很有用,服務器通知不會很難實現。可用時使用websockets。您的場景可以使用集線器輕鬆實現。

+0

無法安裝包'Microsoft.WebSockets 0.2.1'。您正在嘗試將此軟件包安裝到以'.NETFramework,Version = v4.0'爲目標的項目中,但該軟件包不包含任何與該框架兼容的程序集引用。有關更多信息,請聯繫軟件包作者。 – 2012-03-19 16:15:31

+0

你使用Nuget安裝它嗎? – 2012-03-19 17:42:56

+0

是的,我是。 Nuget給了我這個信息。我試圖改變目標框架版本,但無濟於事。 – 2012-03-20 19:41:38

0

如果你想在自己的代碼做的,你可以簡單地修改你的例子:

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

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

但儘管如此,我不知道這是一個使用了Thread.Sleep方法最優實現。