2015-05-08 22 views
7

zu verwenden Ist es möglich, http2 Funktionen mit HTTPListeners noch zu verwenden? Ich habe nichts davon gehört, aber ich habe gehört, dass die neuen Releases des IIS/asp.net-Stacks es unterstützen, also hoffte ich, dass HTTPListener auch ugprasiert werden würde oder eine Alternative zur Verfügung gestellt würde.Ist es möglich, HTTP2 mit HTTPListener

Wenn nicht, was wäre die beste Option, http2 zu unterstützen, mit rohen Sockets arbeiten oder ist es überhaupt möglich, httplistener zu erweitern?

Edit: zu klären, ich bin nicht nur auf der Suche nach einer Lösung, die http2 "berichtet" aber eine, die mich ermöglicht, http2 neue Funktionen wie Pushing Content zu verwenden, ist mein Anwendungsfall ich habe eine benutzerdefinierte CMS (selbst geschrieben) Server, der extrem niedrige Latenz hat (Antworten fast sofort auf alle Anfragen) und das einzige, was noch zu optimieren ist, ist in der Lage Inhalte zu pumpen UND zu multiplexen, da die einzige Beschleunigung, auf die ich hoffen kann, die Latenz von so vielen Roundtrips ist

Antwort

8

HttpListener ist ein verwalteter "Client" für das Windows-Kernelmodul http.sys (ähnlich wie IIS auch ein Client dafür ist). Diese Version dieses Moduls, die HTTP/2 behandelt, scheint nur in Win10/IE verfügbar zu sein. Wenn Sie auf Win10 ausgeführt werden und eine HTTP/2-Verbindung hergestellt wird, wird es wahrscheinlich HttpListener gleich aussehen, da die Schnittstelle zu http.sys Treiber das Protokoll für Clients von HttpListener abstrahiert. Wenn etwas anders ist, wäre es die HttpListenerResponse.ProtocolVersion zeigt HTTP/2.

Mit Blick auf die Quelle von HttpListener scheint es, als ob die Schnittstelle zu http.sys blob-orientiert ist, nur Anfragen abonnieren und die Anfrage Daten in einem großen Blob bekommen. Dieser Blob bildet die Basis der verwalteten Klasse HttpListenerContext, bei der die Anforderungs- und Antwortdaten als Eigenschaften verfügbar sind. Die HttpListenerResponse sendet die Antwort über http.sys, indem die Daten in Kopfzeilen und Datenabschnitte aufgeteilt werden, die über die Eigenschaft OutputStream verfügbar gemacht werden. Wenn Multi-Streams unterstützt würden, müsste diese öffentliche API geändert werden. Es wird sicherlich nicht unterstützt, und ich nehme an, dass sie diese API nicht ändern werden, und wenn HTTP/2 von HttpListener unterstützt wird, wird entweder HTTP/2 vollständig abstrahiert oder eine Art von WriteAsync-Methode bereitgestellt, um diese höher zu multiplexen Niveau. Es klingt, als ob Sie direkt gegen http.sys schreiben möchten, um die Funktionen des Protokolls auf niedrigerer Ebene zu nutzen.

+0

Aber ich schaue mit http2 Funktionen, so dass es keine explizite Feature-Unterstützung auf der .net-Seite gibt, ich glaube nicht, dass ich das tun kann (wie Push-zusätzliche Daten, die nicht an den Client angefordert wurde), oder bin ich missverstände etwas? –

+0

Die gesamte HTTP-Konversation zwischen dem Client und dem Server wird von 'http.sys' verarbeitet. "HttpListener" ruft nur die Anforderungsdaten von "http.sys" ab und sendet Antworten über diesen an den Client zurück. Die öffentliche Schnittstelle von 'HttpListener' muss nicht geändert werden, wenn' http.sys' HTTP/2 unterstützt. – codekaizen

+0

Wenn die neuen Features veröffentlicht werden sollen, zum Beispiel Pushing Content, sehe ich nicht, wie das in der aktuellen Oberfläche dargestellt werden könnte, oder wenn du denkst, dass es möglich ist, könntest du ein Beispiel schreiben? –