<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      網絡編程中如何得知一次請求(或響應)的數據已接收完

          兩年前用.net 2.0做了一個反向代理服務器,在這兩年時間里,不斷修改BUG以及優化性能,使得可用性大大提高。近來碰到一個功能需求,實在無法找出有效的解決辦法,只好上來請教各位高人。
          先說說反向代理的工作機理吧。
      1、客戶端通過瀏覽器訪問反向代理的時候,會發出一個HTTP請求,反向代理收到這個TCP連接的時候,建立一個新的會話用于處理這個請求(BeginAccept、EndAccept);
      2、會話對象建立一個從客戶端接收數據的委托,開始異步讀取數據(BeginRead);
      3、取得數據時,進入異步讀取的回調函數中,開始處理數據(EndRead);
      4、檢查反向代理與服務器的連接是否已建立,如果沒有建立,那么需要先建立連接(ConnectServer),并建立服務器的異步讀取委托(BeginRead);
      5、把數據異步寫入服務器(BeginWrite);
      6、重新建立客戶端異步讀取委托(BeginRead),回到3;
      7、收到服務器返回數據時,處理后,異步寫入客戶端(BeginWrite);
      8、重新建立服務器異步讀取委托(BeginRead),回到7;

      所有的數據傳輸,都使用異步來完成,而只需要在3和7處為業務編寫數據處理代碼即可。
      實際上,對于反向代理來說,只需要處理客戶端發來的數據就可以了,需要把HTTP的HOST頭替換為真實服務器,而對于服務器響應的數據,只需要原樣發送給客戶端就可以了。

      在步驟3中,我們只知道當前收到了客戶端發來的數據,而不知道這個數據是不是Http請求頭,或者是完整的Http請求頭。幸好,對于反向代理來說,不需要關心是否是完整的Http請求頭,只需要檢查是否是Http請求頭,如果是,就修改Host即可。在這里,我假設Http請求的第一個數據包肯定是獨立的數據包,不會“粘”在TCP連接中上一次數據的后面,這樣就可以直接使用Http協議規定的格式來檢查這個數據包是否Http請求頭了。雖然這個假設沒有什么依據,但它確實非常有效。

      程序就這樣工作了兩年,沒有什么問題。

      但接下來,問題就出現了,有一個需求,要求能夠把服務器返回的頁面中的某個字符串替換為指定的字符串。比如我用反向代理指向博客園,我就需要把博客園頁面中所有使用了絕對路徑的連接修改為指向反向代理服務器的連接。這就要求在步驟7這里處理數據,把數據轉為字符串,然后替換鏈接,然后才發往客戶端。

      但步驟7每次收到的數據只是一個片段,而不是整個頁面的HTML。即使我們再次假設Http響應的第一個數據包是獨立的數據包,也只能識別哪些是響應頭,哪些是數據體而已。也想過每一段數據轉為這一段的字符串進行處理,但是,如果剛好某個字符被網絡層拆分到兩個TCP數據包里怎么辦?還有,想博客園這樣使用了gzip的,如果不接受完整個頁面的數據,是無法解壓的;就算這兩種情況都不存在,而網絡層剛好在超鏈接的地方拆分數據包怎么辦?

      因此,最保守的做法就是拿到整個頁面數據再開始處理。也想過Http響應頭那里有個Content-Length指明內容長度的,但實際中,很多響應根本就不到這個段。

      我查看過HttpListener類和HttpListenerRequest類,嘗試從中發現它是如何接受完一次請求(響應)的,可惜這兩個類調用了大量NativeAPI,就無法得知了。

      還有瀏覽器,它又是如何得知某次響應是否已經完成的呢?

      還請各位高人多多指教!

      這個代理已經放到codeplex上,大家有興趣可以看看:http://www.codeplex.com/XProxy/

      還有,不要忘了給我的問題提個解決思路^_^
      謝謝!

      QQ:99363590
      E-Mail:nnhy#vip.qq.com
      QQ群:10193406
      posted @ 2008-03-10 16:08  大石頭  閱讀(4586)  評論(28)    收藏  舉報
      主站蜘蛛池模板: 中文有无人妻VS无码人妻激烈| 激情国产一区二区三区四区| 亚洲男人的天堂av手机在线观看| 依依成人精品视频在线观看| 香港经典a毛片免费观看播放| 亚洲国产成人综合精品| 国产av午夜精品福利| 色午夜一av男人的天堂| 成熟妇女性成熟满足视频| 国产稚嫩高中生呻吟激情在线视频| 亚洲综合天堂av网站在线观看| 人妻中文字幕一区二区三| 国产精品自在拍首页视频8| 国产精品av中文字幕| 国产精品对白刺激久久久| 亚洲精品一区二区制服| 国产成人无码精品久久久露脸 | 一本一道av中文字幕无码| 精品无码一区二区三区在线| 亚洲美免无码中文字幕在线| 制服 丝袜 亚洲 中文 综合| 亚洲自偷自拍熟女另类| 欧美成人午夜精品免费福利| 国产亚洲欧美另类一区二区| 人妻少妇精品中文字幕| 国产av丝袜熟女一二三| 亚洲 制服 丝袜 无码| 在线看国产精品自拍内射| 国产精品一线二线三线区| 男人猛躁进女人免费播放| 精品熟女少妇免费久久| 一区二区三区四区黄色网| 午夜欧美精品久久久久久久| 女的被弄到高潮娇喘喷水视频| 日韩在线视频观看免费网站| 久久亚洲精品无码播放| 激情综合色综合啪啪五月| 思思99热精品在线| 日韩一区二区三区在线观院| 亚洲精品麻豆一区二区| 777奇米四色成人影视色区|