Domanda

È possibile? Possiamo accedere alla presa sottostante, utilizzata da http.sys per servire una risposta per una determinata richiesta. Voglio essere in grado di supportare la comunicazione duplex completa rispetto al protocollo HTTP sulla porta 80.

C'è un modo per afferrare la presa stabilita per la richiesta corrente e tenerla per la comunicazione duplex completa?

Il mio caso di utilizzo sono socket web. La stretta di mano di un socket Web è in realtà una richiesta HTTP valida e vorrei riutilizzare il mio server Web per l'aggiornamento. Un'altra porta potrebbe non essere aperta sul computer client, quindi la porta 80 è vitale.

Eventuali alternative sono apprezzate.

È stato utile?

Soluzione

Con Http.sys non hai accesso alla presa sottostante. È possibile gestire le richieste HTTP e creare le risposte dai frammenti (dalla cache di frammenti, memoria o file). Se è necessario avere il pieno controllo sul socket utilizzato (Avvia come richiesta HTTP, successivamente aggiornala a un socket Websocket dopo che "Secret-WebSocket-Handshake" non è supportato.

Quello che puoi fare è: utilizzare un razzo come il sistema duplex completo. Clienti postano le richieste utilizzando HTTP 1.1 Keep Alive Sockets e quando il server HTTP.SYS riceve tali richieste è possibile posticipare la risposta fino a quando il server al client è disponibile i dati o si verifica un timeout. Questo non è robusto come un WebSocket ma funziona ragionevolmente bene e aggiunge solo uno o due ms al tempo di reazione del server (almeno nei miei test). Gli unici problemi sorgono quando qualcuno ha più pagine aperte in un browser al server e il browser inizia a consentire alle pagine di condividere una singola richiesta HTTP. Per questo abbiamo mantenuto il polling massimo il più basso possibile producendo sostanzialmente più traffico web.

L'altra opzione era di fare il WebSocket noi stessi in "Socket-Code" e le richieste HTTP utilizzando "HTTP.SYS-CODE". Questo funziona anche ragionevolmente bene, ma rende il codice più complesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top