ID de la causa sp-broadcast · Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Infraestructura de servidores (Equipo de infraestructura)
Si el movimiento de un jugador se envía a todos los que lo ven, las actualizaciones que hay que enviar crecen con el cuadrado del número de jugadores reunidos.
Por qué Los cambios de un jugador se envían a todos los que pueden verlo → Efecto Si 1,000 jugadores se ven entre sí, hay 1 millón de actualizaciones por tick → En pantalla La cola de envío y el ancho de banda se saturan: latencia y pérdida (input lag, cámara rápida, teletransporte)
Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Infraestructura de servidores (Equipo de infraestructura)
Tareas (Equipo de desarrollo)
Bajar la frecuencia de actualización según la distancia y la importancia (los enemigos cercanos en cada tick, los jugadores lejanos unas pocas veces por segundo), poner un tope a lo que se envía a cada jugador y llenarlo empezando por lo importante, agrupar varias actualizaciones en un paquete, poner un tope a los jugadores mostrados.
Tareas (Equipo de infraestructura)
Comparar el ancho de banda de envío y los paquetes por segundo de cada servidor con los límites de red de la NIC y de la instancia y alertar, comprobar que hay margen antes de los eventos masivos.
Cifras de referencia
1,000 jugadores × 1,000 jugadores × 20 ticks = 20 millones por segundo. Con 40 bytes cada una, unos 6.4 Gbps para todo el servidor y unos 6.4 Mbps por cada jugador que recibe. Si se limita a 150 el número de jugadores visibles, en total queda en 1 Gbps aproximadamente, y alrededor de 1 Mbps por jugador.
En el gráfico
Sube con la carga · Paquetes y bytes enviados por el servidor, jugadores reunidos en un mismo lugar
Dónde mirar
txpck/s y txkB/s (paquetes y KB enviados por segundo por la NIC del servidor) de sar -n DEV 1 junto al gráfico de jugadores. En instancias de nube, los contadores de límite superado de ethtool -S (en ENA de AWS, bw_out_allowance_exceeded y pps_allowance_exceeded)
Se confirma si
Al aumentar los jugadores reunidos, los paquetes y bytes enviados crecen más rápido que los jugadores (casi al cuadrado), y desde que tocan el límite suben los contadores de límite superado o los descartes de envío
Se descarta si
Si el volumen enviado no cambia y solo crece el tiempo de tick, apunta al cálculo de visibilidad o a la lógica del juego
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)
HED-GP Technical Retrospective: What a HED-acheCCP Games El envío O(n²), en el que n jugadores deben ver lo que hace cada uno de los n, es el límite inevitable de las grandes batallas de flotas
Actor Priority in Unreal EngineEpic Games Cuando se satura el ancho de banda de la conexión, se asigna una prioridad a cada actor (distancia, línea de visión, tiempo desde el último envío) y se reparte el ancho de banda empezando por lo importante
Detailed Actor Replication Flow in Unreal EngineEpic Games NetUpdateFrequency fija la frecuencia de actualización de cada actor; se envía por orden de prioridad y, si la conexión se satura, el resto se aplaza al siguiente tick
sar(1) — Linux manual pagesysstat rxpck/s y txpck/s (paquetes recibidos y enviados por segundo) y rxkB/s y txkB/s (KB recibidos y enviados por segundo) de sar -n DEV