HttpWebRequest&长轮询:如何判断是否已建立长轮询连接?

时间:2017-09-18 05:33:04

标签: c# httpwebrequest long-polling

我需要在我的应用程序和服务器之间建立长轮询连接。我正在使用HttpWebRequest类,它可以工作:

    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.1秒,因为应用程序应该等待来自服务器的回复。

我的问题是,当有成功建立与服务器的连接时,是否有任何方法可以立即告诉我(当然没有断开与服务器的连接)?

请帮忙。谢谢。

1 个答案:

答案 0 :(得分:0)

我最终使用WebSocket而不是Long Polling,使用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();

谢谢。