8

是否可以在 HTTPListeners 中使用 http2 功能?我没有听到任何关于它的消息,但我听说 IIS / asp.net 堆栈的新版本支持它,所以我希望 HTTPListener 也将被升级或提供替代方案。

如果不是,那么支持 http2 的最佳选择是什么,使用原始套接字,或者是否有可能扩展 httplistener?

编辑:澄清我不只是在寻找一个“报告”http2的解决方案,而是一个让我能够实际使用http2新功能(例如推送内容)的解决方案,我的用例是我有一个自定义CMS(自写)服务器极低的延迟(几乎立即回复所有请求),唯一需要优化的是能够推送内容和能够多路复用,因为目前我唯一希望的加速是避免这么多往返的延迟

4

1 回答 1

9

HttpListener是 Windows 内核模块http.sys的托管“客户端” (类似于 IIS 也是它的客户端)。这个处理 HTTP/2 的模块版本似乎只在Win10/IE中可用。如果您在Win10上运行并建立了 HTTP/2 连接,它可能看起来HttpListener与. 如果有什么不同,那就是显示的 HTTP/2。http.sysHttpListenerHttpListenerResponse.ProtocolVersion

查看 的来源HttpListener,似乎 to 的接口http.sys是面向 blob 的,只是订阅请求并在一个大 blob 中获取请求数据。此 blob 构成托管HttpListenerContext类的基础,该类具有作为属性公开的请求和响应数据。通过将数据分解为通过属性公开的标头和数据块来HttpListenerResponse发送响应。如果支持多流,则需要更改此公共 API。目前肯定不支持它,我猜他们不会改变这个 API,如果 HTTP/2 将被支持,它将完全抽象 HTTP/2 或提供某种方法在这个更高级别进行多路复用。听起来你想直接写反对http.sysOutputStreamHttpListenerWriteAsynchttp.sys利用协议的较低级别的功能。

于 2015-05-11T02:35:32.150 回答