¿Qué significa el tiempo de espera del socket?
Hay dos casos de tiempo de espera de conexión de Socket.connect:
1. Debido a problemas de red, tiempo de protocolo de enlace de tres vías TCP/IP >: tiempo de configuración del tiempo de espera. Esta situación puede ocurrir al acceder a Weibo en el extranjero y el entorno de red es extremadamente pobre.
Solución: aumentar el valor del parámetro de tiempo de espera en el método socket.connect, como 50 segundos. El valor máximo predeterminado para Linux es 70. Si no tiene sentido exceder los 70, Linux usará los 70.
Sin embargo, cuando se abre, si se encuentra que es inferior a 10 segundos, se informará como una excepción de tiempo de espera.
Descubra que es inaccesible haciendo ping a api.weibo.com con una máquina extranjera.
Significa que el cliente ni siquiera puede enviar mensajes Syn en la capa de red debajo de la capa de transporte, y mucho menos el protocolo de enlace de tres vías. El cliente falla directamente y genera una excepción de tiempo de espera.
Experiencia: El primer paso en el diagnóstico del tiempo de espera de la conexión debe ser hacer ping para confirmar que no hay ningún problema en la capa de red.
Nota: El cliente ha establecido un tiempo de espera, pero no esperará hasta que se agote el tiempo de espera antes de devolver una excepción. Siempre que el cliente descubra que la conexión falló la primera vez, se generará una excepción de tiempo de espera.
2. Si el tiempo de espera se establece durante suficiente tiempo, pero la capacidad de procesamiento del servidor es deficiente, por ejemplo, la cola de conexión almacenada en el búfer es pequeña y la capacidad de procesamiento de la capa de aplicación no es tan rápida como el almacenamiento en búfer de la conexión. , lo que provoca que la conexión almacenada en el búfer esté llena y que se rechacen nuevas conexiones.
Durante la denegación de servicio del servidor debido a una cola de conexión llena, el cliente intentó tres veces más el protocolo TCP. Duplica el tiempo cada vez.
Si la acumulación de tres veces es
Si la acumulación de tres veces es
Tiempo de espera de lectura y escritura
Hace. tiene sentido establecer el tiempo de espera de lectura. En situaciones en las que el servidor tiene poca potencia de procesamiento pero finalmente responde, el tiempo de espera del cliente se puede establecer más largo. Si es demasiado largo, debido a que el cliente usa el método BIO, el hilo siempre se bloqueará en IO, lo que provocará un bloqueo. Cuando la potencia de procesamiento del cliente es significativamente más rápida que la del servidor, habrá muchos subprocesos colgados.
Ya sea el cliente o el servidor, cuando hay muchos subprocesos bloqueados, afectará el rendimiento de la máquina. Vi en el foro de Weibo que alguien configuró el tiempo de espera en 100 segundos después del tiempo de espera de lectura. Esto es muy peligroso. Una vez que el servidor de Sina falla, su propio servidor también fallará debido a una gran cantidad de subprocesos.
Porque después de que se suspende un hilo, los recursos que posee, como la memoria, no se liberarán hasta que se complete el bloqueo. Al mismo tiempo, la suspensión de una gran cantidad de subprocesos significa que el sistema debe reanudar una gran cantidad de contextos y ejecuciones programadas.
Solución:
Si el cliente usa NIO y la respuesta del servidor puede marcar la solicitud del cliente, entonces el hilo puede colocar la solicitud en BlockQueue después de la solicitud del cliente y luego usar el futuro O esperar / notificar y otros mecanismos para devolver las solicitudes en la cola y luego procesarlas, logrando así un procesamiento asincrónico, y una pequeña cantidad de subprocesos pueden atender una gran cantidad de solicitudes.
De manera similar, si el servidor puede usar NIO para manejar la solicitud de cada hilo en lugar de conectar cada hilo, puede reducir en gran medida el desperdicio de recursos causado por la suspensión del hilo. NIO es adecuado para situaciones con muchas conexiones y pocas solicitudes. Además, Commet también se denomina tecnología de inserción de servidores y su característica principal son las conexiones largas. Evite sondeos de solicitudes ineficientes en el lado del cliente. Se utiliza principalmente en salas de chat y Weibo. Debido a que hay muchas conexiones, no necesariamente hay muchas solicitudes. También es adecuado para usar NIO en el lado del servidor.
Nota: Cuando se produce una excepción de tiempo de espera de lectura, no es necesario hacer ping a la máquina remota porque la conexión de la ubicación secundaria expira. Si el ping falla, definitivamente se trata de un tiempo de espera de conexión y no de lectura. Las excepciones de tiempo de espera de lectura no provocan que se interrumpa la conexión. Brinde la oportunidad de volver a intentarlo.
2. El tiempo de espera de escritura es generalmente diferente del tiempo de espera de conexión y el tiempo de espera de lectura, y el valor de ajuste se puede mostrar en el cliente. TCP tiene el concepto de retransmisión de escritura y lo volverá a intentar dentro de los 8 m; de lo contrario, se desconectará directamente.
Si te resulta útil, adóptalo.