none
GET 長輪詢一問 RRS feed

  • 問題

  •  平時HttpWebRequest GET時Code如下

          string targetUrl = "https://......";
                    HttpWebRequest requestQR = HttpWebRequest.Create(targetUrl) as HttpWebRequest;
                    requestQR.Method = "GET";
                    requestQR.ContentType = "application/x-www-form-urlencoded";
                    requestQR.Timeout = 30000;
                    object resultQR = null;
                    // 取得回應資料
                    using (HttpWebResponse responseQR = requestQR.GetResponse() as HttpWebResponse)
                    {
    
                        using (StreamReader sr = new StreamReader(responseQR.GetResponseStream()))
                        {
                            resultQR = sr.ReadToEnd();
                            sr.Close();
                        }
                    }
                    return resultQR.ToString();

    也沒有問題

    但今天對方使用了長輪詢 GET一次後 若30s內伺服器端沒有回應 就會回傳一個null 若有則回應相關資訊

    然後我只要收到null或資訊 後就在GET一次

    可是用上述的code就會卡在

     using (HttpWebResponse responseQR = requestQR.GetResponse() as HttpWebResponse)

    然後就跳逾時(這問題我把timeout改成>30s就解決)

    但是我該怎麼解決程式被卡住的問題  ?

    <link href="moz-extension://044a255a-e72e-457f-98d5-497a240bfa23/skin/s3gt_tooltip_mini.css" rel="stylesheet" type="text/css" /><style media="print" type="text/css">#s3gt_translate_tooltip_mini { display: none !important; }</style>


    • 已編輯 dodolon 2018年6月28日 上午 09:50
    2018年6月28日 上午 09:38

解答

所有回覆

  •  你可以用 GetResponseAsync 非同步呼叫


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    2018年6月28日 下午 02:53
    版主
  • long polling的程式寫法可以參考:

    • 已標示為解答 dodolon 2018年7月2日 上午 03:39
    2018年6月29日 上午 12:13