Question

Est-ce possible? Pouvons-nous accéder à la prise sous-jacente, utilisée par HTTP.SYS pour servir une réponse pour une demande donnée. Je veux pouvoir prendre en charge la communication duplex complète sur le protocole HTTP sur le port 80.

Existe-t-il un moyen de saisir la prise établie pour la demande actuelle et de le garder pour une communication duplex complète?

Mon cas d'utilisation est le web sockets. La poignée de main d'une prise Web est en fait une demande HTTP valide, et je voudrais réutiliser mon serveur Web pour le mettre à niveau. Un autre port peut ne pas être ouvert sur la machine client, donc le port 80 est vital.

Toutes les alternatives sont appréciées.

Était-ce utile?

La solution

Avec http.sys, vous n'avez pas accès à la prise sous-jacente. Vous pouvez gérer les demandes HTTP et créer les réponses à partir de fragments (à partir du cache, de la mémoire ou des fichiers des fragments). Si vous avez besoin d'avoir un contrôle complet sur la prise utilisée (démarrer comme une demande HTTP, la mise à niveau plus tard dans une prise WebSocket après que le "Secret-WebSocket-Handshake" ne soit pas pris en charge.

Ce que vous pouvez faire, c'est: utiliser une fusée comme le système complet du duplex. Les clients publient des demandes à l'aide de HTTP 1.1 Keep Alive Sockets et lorsque le serveur HTTP.SYS reçoit ces demandes, vous pouvez reporter la réponse jusqu'à ce que les données déclenchées par le serveur vers le client soient disponibles ou qu'un délai d'attente se produit. Ce n'est pas aussi robuste qu'un WebSocket mais fonctionne assez bien et n'ajoute qu'un ou deux ms au temps de réaction du serveur (au moins dans mes tests). Les seuls problèmes surviennent lorsque quelqu'un a plusieurs pages ouvertes dans un navigateur sur le serveur et que le navigateur commence à permettre aux pages de partager une seule demande HTTP. Pour cela, nous avons gardé le sondage maximal aussi bas que possible, ce qui donne beaucoup plus de trafic Web.

L'autre option était de faire le WebSocket nous-mêmes dans "Socket-Code" et les demandes HTTP à l'aide du "http.sys-code". Cela fonctionne également assez bien, mais rend le code plus complexe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top