Pregunta

es posible? ¿Podemos acceder al socket subyacente, utilizado por http.sys para cumplir una respuesta para una solicitud determinada? Quiero poder admitir la comunicación dúplex completa sobre el protocolo HTTP en el puerto 80.

¿Hay alguna forma de obtener el enchufe establecido para la solicitud actual y mantenerlo para la comunicación dúplex completa?

Mi caso de uso son los enchufes web. El apretón de manos de un socket web es en realidad una solicitud HTTP válida, y me gustaría reutilizar mi servidor web para actualizarlo. Es posible que otro puerto no se abra en la máquina del cliente, por lo que el puerto 80 es vital.

Se agradecen cualquier alternativa.

¿Fue útil?

Solución

Con http.sys no tiene acceso al enchufe subyacente. Puede manejar las solicitudes HTTP y desarrollar las respuestas a partir de fragmentos (de caché, memoria o archivos de fragmentos). Si necesita tener el control total sobre el socket utilizado (comience como una solicitud HTTP, luego actualice a un socket WebSocket después de que no sea compatible con el "Secret-Websocket-Handshake".

Lo que puede hacer es: usar un cohete como el sistema dúplex completo. Los clientes publican solicitudes con HTTP 1.1 Mantenga los sockets vivos y cuando el servidor http.sys recibe esas solicitudes, puede posponer la respuesta hasta que el servidor al cliente se active los datos o se produzca un tiempo de espera. Esto no es tan robusto como un websocket, pero funciona razonablemente bien y solo agrega uno o dos ms al tiempo de reacción del servidor (al menos en mis pruebas). Los únicos problemas surgen cuando alguien tiene múltiples páginas abiertas en un navegador al servidor y el navegador comienza a permitir que las páginas compartan una sola solicitud HTTP. Para esto, mantuvimos la encuesta máxima lo más baja posible produciendo sustancialmente más tráfico web.

La otra opción era hacer WebSocket nosotros mismos en "Socket-Code" y las solicitudes HTTP utilizando el "HTTP.SYS-Code". Esto también funciona razonablemente bien, pero hace que el código sea más complejo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top