是否可以将 HTTP2 与 HTTPListener 一起使用

Is it possible to use HTTP2 with HTTPListener

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

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

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

HttpListener is a managed "client" for the Windows kernel module http.sys (similar to how IIS is also a client for it). This version of this module which handles HTTP/2 appears to be only available in Win10 / IE。如果您在 Win10 上 运行 并且建立了 HTTP/2 连接,它可能看起来与 HttpListener 相同,因为 http.sys driver 的接口抽象了HttpListener 客户的协议。如果有什么不同,那就是 HttpListenerResponse.ProtocolVersion 显示 HTTP/2。

HttpListener的源码,好像http.sys的接口是blob-oriented,只是订阅请求,获取请求数据在一个大blob中。此 blob 构成了托管 HttpListenerContext class 的基础,后者将请求和响应数据公开为属性。 HttpListenerResponse 通过 http.sys 将数据分成 headers 和它通过 OutputStream 属性 公开的数据块来发送响应。如果支持 multi-streams,则需要更改此 public API。目前肯定不支持它,我的猜测是他们不会改变这个 API,如果 HTTP/2 将被 HttpListener 支持,它将完全抽象 HTTP/2或提供某种 WriteAsync 方法以在更高级别进行多路复用。听起来您想直接针对 http.sys 编写以利用协议的较低级别功能。