Cuello de botella al procesar paquetes en el hilo principal Network processing on the main thread
ID de la causa cg-net-mainthread · Responsable principal Desarrollo de cliente (Equipo de desarrollo) · También Desarrollo de servidor (Equipo de desarrollo)
Si el cliente solo procesa una cantidad fija de paquetes recibidos por frame, cuando llegan muchos de golpe se acumulan y se van pasando una y otra vez al frame siguiente.
Por qué Donde hay mucha gente llegan miles de actualizaciones por segundo → Efecto El hilo principal topa con su límite de procesamiento por frame y no alcanza a leerlas todas → En pantalla Los movimientos de los demás se aplican cada vez más tarde y todos de golpe
Responsable principal Desarrollo de cliente (Equipo de desarrollo) · También Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Cliente: recibir y decodificar en un hilo aparte, fusionar las actualizaciones de posición antiguas de una misma entidad y aplicar solo la más reciente. Servidor: donde hay mucha gente, enviar con menos frecuencia las actualizaciones de los personajes lejanos para reducir el volumen de envío.
Cifras de referencia
Si se acumulan paquetes sin procesar, en pocos segundos ya hay un segundo entero de retraso.
En el gráfico
Sube con la carga · Paquetes recibidos sin procesar, retraso entre recepción y aplicación
Dónde mirar
Registrar en logs cuántos paquetes deja sin procesar el cliente en cada frame y el retraso desde que llega un paquete hasta que se aplica al juego, y verlo junto al número de jugadores cercanos
Se confirma si
Donde hay mucha gente, los paquetes pendientes y el retraso de aplicación no paran de crecer, mientras que en ese mismo momento el ping y el intervalo de envío del servidor son normales
Se descarta si
Si no hay retraso de aplicación pero los paquetes ya llegan tarde, el problema está en la red. Si el tiempo de frame sube mucho: “Carga de renderizado de multitudes”
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Fuentes
Actor Priority in Unreal EngineEpic Games Cuando falta ancho de banda, no se replican todos los actores cada vez; se priorizan según la distancia al observador y el tiempo desde la última replicación
Replication Graph in Unreal EngineEpic Games Los juegos con muchos jugadores conectados y muchos objetos que replicar (MMORPG, etc.) tienen que agruparlos por posición y enviar solo lo necesario para evitar un cuello de botella en la CPU del servidor