2015-05-08 107 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

如果要显示新功能,例如推送内容,我不知道如何在当前界面中显示这些新功能,或者如果您认为它可以让您编写样本? –