2011-05-04 96 views
0

這可能嗎?我們可以訪問底層套接字,http.sys使用它來服務於給定請求的響應。我希望能夠支持全雙工通信,通過端口80Http.sys是否支持全雙工通信?

HTTP協議是有辦法抓住當前請求建立的插座,並保持它的全雙工通信?

我的用例是web套接字。 Web套接字的握手實際上是一個有效的http請求,我想重新使用我的Web服務器來升級它。另一個端口可能不會在客戶機上打開,所以端口80是至關重要的。

任何替代方案表示讚賞。

回答

0

在http.sys中,您無權訪問底層套接字。您可以處理http請求並從碎片(從碎片緩存,內存或文件)中構建響應。如果您需要有在使用的插座完全控制(開始作爲一個http請求,後來的「祕密WebSocket的握手」,不支持後它升級到WebSocket插座

你可以做的是:使用像全雙工系統一樣,客戶端使用HTTP 1.1保持活動套接字發送請求,當http.sys服務器接收到這些請求時,您可以推遲答案,直到服務器到客戶端觸發的數據可用或發生超時。不像websocket那樣健壯,但是執行得相當好,只會在服務器響應時間內增加一到兩毫秒(至少在我的測試中)。唯一的問題是當某人在瀏覽器中向服務器打開多個頁面並且瀏覽器啓動時讓這些頁面共享一個http請求。爲此,我們儘可能降低了最大輪詢次數,從而產生了更多的網絡流量。

另一個選擇是使用「http.sys-code」在「socket-code」和http請求中自己執行websocket。這也相當適用,但使代碼更復雜。