2010-01-31 41 views
0

我最近開發並完成了一個軟件,其中的作品像瞄準。 但問題在於,服務器對當地朋友來說工作得很好,因爲他們距離服務器只有25英里,所以沒有任何滯後。 但是,當上傳到Web主機時,它每次ping服務器時都會滯後。 服務器使用PHP,因此無需再購買400美元/月的專用計算機。 下面是其中客戶端不斷在調用該函數:VB.NET HTTP LAG!試圖讓我自己的IM客戶端

Public Function GetPage(ByVal url As String) 
    Dim WReq As HttpWebRequest 
    Dim WResp As WebResponse 
    Dim sr As IO.StreamReader 

    Try 
     WReq = WebRequest.Create(url) 
     WReq.CookieContainer = cookies 
     WReq.Timeout = "120000" 
     WResp = WReq.GetResponse() 
     sr = New IO.StreamReader(WResp.GetResponseStream()) 

     GetPage = sr.ReadToEnd() 

     WResp.Close() 
     Return (GetPage) 
    Catch err As SystemException 
     MsgBox("err message: " & err.ToString & vbCrLf) 

    Catch ex As Exception 
     MsgBox("err message: " & ex.ToString & vbCrLf) 

    End Try 
End Function 

的演示網址會像 http://localhost/chat/newpm.php?to=User&msg=Hello 那麼,如何OSCAR做到這一點(的平臺,爲AOL,又名AIM) 和如何做味精? gtalk或其他大型即時通訊客戶做到這一點?

我正在考慮重新編碼getpage函數,以便它連接到TCP服務器並不斷等待新消息,我仍然不確定這是否會導致延遲,如果主機位於美國,客戶端是不(例如)。 您能否爲我提供這個問題的補救措施?

+0

你實際得到多少滯後?當你與遠在身邊的服務器通信時,你肯定會看到更多的延遲。這僅僅是光速的限制,是不可避免的(至少在這個宇宙中)。 – 2010-01-31 20:33:36

+1

你的函數定義GetPage沒有指定返回值,所以我假設我們沒有看真正的代碼。延遲不應該是一個問題,除非你通過衛星穿過網絡。你可以在赤道上地球旅行,只需要200毫秒。或者。 – dbasnett 2010-01-31 22:18:39

+0

您需要將'WebResponse'和'StreamReader'放入'Using'塊中。另外,不需要單獨捕獲'Exception'和'SystemException'。事實上,不要捕捉 - 功能不應該有一個用戶界面。讓UI決定如何處理異常。 – 2010-01-31 23:05:04

回答

0

Timeout非常高。收到響應流後,檢查應用程序是否關閉連接。計算機接受多少個連接器,否則連接器將鎖定該請求直到一個空閒。

0

好的,回答John Feminella: 完全同意,AIM MSN和其他人如何解決這個掛起問題? Dbasnett:return(GetPage)將返回所請求頁面的結果,而這只是每秒至少被調用兩次的代碼的主要陷阱。 John Saunders: 我不明白「使用」塊的目的或功能,我添加了catch,以便在服務器超時或無法解析時通知用戶。 盛卡夫 超時僅2分鐘,我不認爲它 GETPAGE(Login.server &「pms.php爲=?」 &到) 這一切,那麼這將解析從響應結果。