2012-08-01 17 views
7

Estoy tratando de obtener más información sobre websocket y sus implementaciones internas. Pero todavía no puedo entender algunas cosas. Intenté buscar en Google una explicación en profundidad, pero la mayoría solo brinda una descripción general de alto nivel. Las siguientes son mis dudasconfiguración de conexión Websocket

1. De acuerdo con lo que leo, el servidor de socket web (implementación C#/C++) usa el puerto 80. Aunque podemos usar cualquier puerto, es preferible que usemos el puerto 80 como ganamos No tiene problemas con el firewall. Si es así, ¿cómo se supone que debemos ejecutar tanto el servidor web como el servidor de socket web en el mismo puerto (80)?

2. Vamos a suponer que el servidor de socket Web se ejecuta en el puerto 81 y el servidor web se ejecuta en el puerto 80.

  1. Así que cuando el explorador emite la solicitud inicial de HTTP apretón de manos (Actualiza: WebSocket) , esta solicitud fue enviada al puerto 81. ¿Verdad? Si es así, esta solicitud (ver a continuación) no tiene ninguna relación con un protocolo HTTP. Pero aún usamos encabezados de protocolo HTTP. ¿Por qué?

     GET /mychat HTTP/1.1 
         Host: server.example.com 
         Upgrade: websocket 
         Connection: Upgrade 
         Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== 
         Sec-WebSocket-Protocol: chat 
         Sec-WebSocket-Version: 13 
         Origin: http://example.com 
    
  2. qué fuerza que utilizan la misma interfaz WebSocket implementado actualmente en la mayoría navegador para emitir una conexión TCP/IP con la conexión de puerto dado, sin ningún tipo de material de HTTP?

3. ¿Hay algún límite de paquetes de datos de tamaño o/límite de búfer para los datos enviados/recibidos de cliente/servidor? Si ese es el caso, ¿necesitamos enmarcar los datos y manejarlos nosotros mismos?

4. ¿El servidor websocket siempre debe ser un servicio/proceso separado? En el futuro, el servidor web (IIS, apache) incluirá soporte para alojar servidores de socket web dentro de su espacio de proceso.

+0

realmente buenas preguntas! – GameScripting

+1

Recuerdo haber leído en algún lado que la próxima versión de Windows Server admitirá conectores web en IIS. Windows 2008 no puede soportar WebSockets debido a la implementación de http.sys. Si encuentro la referencia, la soltaré en la respuesta – JoshBerke

Respuesta

3
  1. Mediante el uso de un protocolo de enlace compatibles HTTP puede integrar un controlador de WebSocket en su servidor web o simplemente tener el servidor web hacia adelante la conexión WebSocket a un servidor de WebSocket dedicado.

  2. El protocolo de enlace WebSocket utiliza un protocolo de enlace compatible con HTTP para permitir que ambos protocolos se manejen fácilmente en el mismo puerto y permite que las configuraciones de firewall existentes soporten mucho más el tráfico WebSocket. Además, la prevención de ataques de guiones cruzados se entiende bien en el contexto de las solicitudes HTTP, por lo que WebSocket aprovecha ese conocimiento. Incluso después de que se establezca la conexión, WebSocket es , no es una conexión RAW. Es un protocolo basado en mensajes y, por lo tanto, requiere un encuadre. Además, el encuadre se enmascara cuando se envía desde el cliente (navegador) al servidor para aliviar los temores de una vulnerabilidad teórica en portadores/intermediarios/caché incorrectos.

  3. No hay límite en el tamaño del mensaje en el protocolo en sí. Un mensaje se puede dividir en varios cuadros. Hay un límite de protocolo para el tamaño del marco pero es de 2^64 bytes. El límite de tamaño de fotograma real será más pequeño dependiendo de la implementación del cliente/servidor. Si tiene mensajes individuales de varios megabytes que desea enviar, puede considerar cambiar su aplicación para usar mensajes más pequeños a fin de maximizar la compatibilidad entre navegadores y entre servidores.

  4. WebSocket definitivamente se puede integrar en los servidores web y esto fue en gran medida un escenario previsto por el grupo de trabajo.Por ejemplo, considere pywebsocket que está diseñado para ejecutar tanto el módulo autónomo como mod_python en Apache. Como otro ejemplo, ASP.NET 4.5 and IIS 8 will have built-in support for WebSockets.

+0

. Supongo que el servidor web que reenvía la conexión Websocket aún no es práctico. – SysAdmin

+0

@SysAdmin ¿te refieres a que no es práctico para ti? Mucha gente lo está haciendo con éxito. Una búsqueda rápida me dio estos: http://serverfault.com/questions/290121/configuring-apache2-to-proxy-websocket, http://stackoverflow.com/questions/2419346/can-nginx-be-used-as -a-reverse-proxy-for-a-backend-websocket-server, http://www.letseehere.com/reverse-proxy-web-sockets – kanaka

Cuestiones relacionadas