2017-09-18 73 views
1

我需要在我的應用程序和服務器之間建立一個長輪詢連接。我使用HttpWebRequest類,它的工作原理:HttpWebRequest&Long Polling:如何判斷長輪詢連接是否已建立?

for (; ;) 
    { 
     System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); 

     request.Timeout = 100000; 
     request.Method = "GET"; 
     request.KeepAlive = true; 
     request.Credentials = System.Net.CredentialCache.DefaultCredentials; 

     var response = request.GetResponse(); 
     : 
     : (wait for response...) 
    } 

我需要知道服務器是否在線。如果它處於脫機狀態,應用程序需要立即通知用戶。但是,如果服務器處於脫機狀態,GetResponse()將不會返回任何錯誤,直到達到超時。

我無法將超時減少爲0.1s,因爲應用程序應該坐下來等待服務器的回覆。

我的問題是,如果有什麼方法可以讓我在與服務器的連接成功建立時立即告知(當然不需要從服務器斷開連接)?

請幫忙。謝謝。

回答

0

我終於用的WebSocket而不是長輪詢,採用WebSocket4Net,和它的作品:

WebSocket websocket = new WebSocket(url); 

websocket.Opened += (sender, e) => 
{ 
    // successfully connected, do sth (this is what i need) 
}; 

websocket.Error += (sender, e) => 
{ 
    Console.WriteLine(e.Exception.Message); 
}; 

websocket.MessageReceived += (sender, e) => 
{ 
    string msg = e.Message; 
}; 

websocket.Open(); 

謝謝。

相關問題