2015-05-08 86 views
7

是否可以在HTTPListeners中使用http2功能?我沒有聽到任何關於它的消息,但是我聽說IIS/asp.net堆棧的新版本支持它,所以我希望HTTPListener也會被ugpraded或者提供替代方案。是否可以在HTTPListener中使用HTTP2

如果不是支持http2的最佳選擇,使用原始套接字還是可以擴展httplistener?

編輯:澄清我不只是尋找一個解決方案,「報道」http2,但一個使我能夠實際使用http2新功能,如推內容,我的用例是我有一個自定義的CMS(自寫)服務器的延遲極低(即時回覆所有請求),唯一需要優化的是能夠推送內容並能夠多路複用,因爲目前我希望的唯一加速是避免來自如此多繞線的延遲

回答

8

HttpListener是Windows內核模塊http.sys(類似於IIS也是它的客戶端)的託管「客戶端」。處理HTTP/2的此模塊版本似乎僅在Win10/IE中可用。如果您在Win10上運行並且建立了HTTP/2連接,則它看起來可能與HttpListener相同,因爲http.sys驅動程序的接口抽象出HttpListener的客戶端協議。如果有什麼不同,它將顯示HTTP/2的HttpListenerResponse.ProtocolVersion

看看HttpListener的來源,似乎http.sys的接口是面向blob的,只是訂閱請求並獲取請求數據在一個大塊。此blob形成受管理的HttpListenerContext類的基礎,該類具有作爲屬性公開的請求和響應數據。 HttpListenerResponse通過將數據分解爲通過OutputStream屬性公開的標題和數據塊來發送通過http.sys的響應。如果多流支持,這個公共API將需要改變。目前肯定不支持,我的猜測是他們不會改變這個API,並且如果HTTP/2將被HttpListener支持,它將完全抽象HTTP/2或者提供某種類型的WriteAsync方法來在這個更高的水平。這聽起來像你想直接寫http.sys來利用協議的低級功能。

+0

但我在看使用http2功能,所以除非在.net端有明確的功能支持,我不認爲我可以做到這一點(比如推送未向客戶端請求的附加數據),或者我誤解了什麼? –

+0

客戶端和服務器之間的整個HTTP會話由'http.sys'處理。 'HttpListener'只從'http.sys'獲取請求數據,並通過它將響應發送回客戶端。一旦'http.sys'支持HTTP/2,'HttpListener'的公共接口不需要改變。 – codekaizen

+0

如果要顯示新功能,例如推送內容,我不知道如何在當前界面中顯示這些新功能,或者如果您認爲它可以讓您編寫樣本? –

相關問題