Pregunta

estamos tenemos un cliente que necesita para obtener interactivo mensajes de un servidor, de los clientes que están distribuidas por todo el mundo detrás de todos los tipos de firewalls con todos los tipos de puertos cerrados.La única cosa que podemos confiar en el puerto 80 HTTP (HTTPS 443).

El diseño es básicamente modelado después de XMPP (el protocolo Jabber), el uso de nuestro cliente y de IIS.El cliente emite peticiones GET a una .NET Controlador;el controlador mantiene la petición abierto por un tiempo buscando los mensajes.Si los mensajes llegan, son inmediatamente enviados al cliente;si no, después de un tiempo de espera de la conexión se cierra con un "no" datos de respuesta.El cliente de inmediato vuelve a abrir la comunicación.

Bien, en teoría.

Lo que está ocurriendo en realidad es la primera, IIS no puede manejar más de 100 solicitudes simultáneas - los demás están todos en la cola, y no puede ser de varios minutos de retraso entre "conectados" y IIS reconociendo que el cliente llama en.Segundo, la mitad del tiempo que el cliente se agota, sin ninguna respuesta desde el servidor (el tiempo de espera de cliente es cinco minutos más largo que el del servidor).

POST siempre funciona.Otros datos entregados en el mismo servidor web funciona.Servicios Web en el mismo servidor de trabajo.Este es un fuera-de-la-caja de instalación en Windows 2K3 Server.

Hay una opción de configuración que nos falta, o es que hay algo más que debo mirar para abordar esto?

Gracias.

¿Fue útil?

Solución

Creo que te estás pegando ASP.NET grupo de subprocesos límites, en lugar de IIS queridos.Buscar en la creación de un asincrónica controlador HTTP (IHttpAsyncHandler) como cuando se bloquean/esperar que no atar el hilo de la piscina (que utilizan puertos de finalización de lugar).

Actualización:Llegaron a través de este recientemente que parece estar de acuerdo con mi forma de pensar: CodeProject:Escalable COMETA Combinado con ASP.NET

Otros consejos

Si IIS no se ajuste a sus requisitos, usted debe elegir otro servidor web, tales como Apache (con Mod_mono) o LightTPD.

Por CIERTO, puede túnel XMPP a través de HTTP utilizando XMPP Más de BOSH.No hay necesidad de inventar un protocolo personalizado.

Fuera de la caja, windows necesita algunos tweeking.Tuve que implementar un cometa en el servidor asp.net y corrió a algunos tontos valores predeterminados.Después de leer estos enlaces:

Me encontré con los siguientes cambios que se hicieron a nuestro windows 2k8 servidor.

  • reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 1000000 /f
  • reg add HKLM\System\CurrentControlSet\Services cpIp\Parameters /v TcpTimedWaitDelay /t REG_DWORD /d 30 /f
  • reg add HKLM\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0 /v MaxConcurrentThreadsPerCPU /t REG_DWORD /d 0 /f
  • reg add HKLM\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0 /v MaxConcurrentRequestsPerCPU /t REG_DWORD /d 30000 /f
  • appcmd.exe conjunto de apppool "[app nombre del grupo]" /queueLength:65535
  • appcmd.exe set config /sección:serverRuntime /appConcurrentRequestLimit:100000
  • reg add HKLM\System\CurrentControlSet\Services cpIp\Parameters /v MaxUserPort /t REG_DWORD /d 65534 /f
  • reg add HKLM\System\CurrentControlSet\Services cpIp\Parameters /v MaxFreeTcbs /t REG_DWORD /d 2000 /f
  • reg add HKLM\System\CurrentControlSet\Services cpIp\Parameters /v MaxHashTableSize /t REG_DWORD /d 2048 /f reg add HKLM\System\CurrentControlSet\Services\InetInfo\Parameters /v MaxPoolThreads /t REG_DWORD /d 80 /f
  • appcmd set config /sección:processModel /valor requestqueuelimit:100000 /commit:MÁQUINA

No sé si todos los cambios eran necesarios o la óptima, pero con algunos quik tesing en contra de un servidor de prueba, hemos logrado más de 30k de la ejecución de las conexiones y 5k solicitudes por segundo.No podía ir más allá porque se me acabó el cliente de las máquinas para ejecutar las pruebas de.

XMPP nunca fue diseñado para aplicaciones de alto rendimiento.Los mensajes deben pasar a través de la totalidad de la pila a la capa de aplicación, y hay un montón de análisis de XML.Ha considerado el uso de alguna otra norma, además de XMPP?

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