En sus inicios el lazo principal del server era más o menos así:
while
{
chequeo de eventos (incluye entrada de paquetes)
revisar la lista de jugadores y ejecutar refrescado si no han sido tocados en 2 segundos
lo mismo para los NPCs
}
Tal esquema, en principio, no es tan malo. Bajo una situación de 1700 entidades NPC consumía un 15-30% de CPU como ya mencioné en una anotación anterior. Sin embargo, una solución más óptima y sencilla de implementear es la siguiente:
while
{
chequeo de eventos (incluye entrada de paquetes)
revisar la lista de jugadores y ejecutar refrescado si no han sido tocados en 2 segundos
revisar solo un NPC e incrementar el iterator para la proxima vuelta del lazo
}
En este caso sólo se verifica/ejecuta una entidad por cada iteración del ciclo principal. La única preocupación es que el servidor pueda garantizar que todas las entidades (NPCs o jugadores) se reciban su refrescado cada dos segundos o cualquiera que sea el intervalo.
Sin embargo, no he podido hacer los mismo para el procesado de jugadores. Aquí la solución no es tan sencilla, ya que en un inicio la lista de jugadores está vacía, situación que podría repetirse más adelante si todos los jugadores se desconectan. Por tanto se requieren algunas verificaciones que aún no me he molestado en elucubrar para evitar iterar una lista vacía y explotar el server. De todas formas, el uso de listas y vectores de STL tendrá que ser descartado más adelante en favor de quadtrees por una razón que explicaré luego.
Se admiten opiniones y sugerencias acerca de cómo optimizar aún más el lazo.
while
{
chequeo de eventos (incluye entrada de paquetes)
revisar la lista de jugadores y ejecutar refrescado si no han sido tocados en 2 segundos
lo mismo para los NPCs
}
Tal esquema, en principio, no es tan malo. Bajo una situación de 1700 entidades NPC consumía un 15-30% de CPU como ya mencioné en una anotación anterior. Sin embargo, una solución más óptima y sencilla de implementear es la siguiente:
while
{
chequeo de eventos (incluye entrada de paquetes)
revisar la lista de jugadores y ejecutar refrescado si no han sido tocados en 2 segundos
revisar solo un NPC e incrementar el iterator para la proxima vuelta del lazo
}
En este caso sólo se verifica/ejecuta una entidad por cada iteración del ciclo principal. La única preocupación es que el servidor pueda garantizar que todas las entidades (NPCs o jugadores) se reciban su refrescado cada dos segundos o cualquiera que sea el intervalo.
Sin embargo, no he podido hacer los mismo para el procesado de jugadores. Aquí la solución no es tan sencilla, ya que en un inicio la lista de jugadores está vacía, situación que podría repetirse más adelante si todos los jugadores se desconectan. Por tanto se requieren algunas verificaciones que aún no me he molestado en elucubrar para evitar iterar una lista vacía y explotar el server. De todas formas, el uso de listas y vectores de STL tendrá que ser descartado más adelante en favor de quadtrees por una razón que explicaré luego.
Se admiten opiniones y sugerencias acerca de cómo optimizar aún más el lazo.
Perdona que te lo diga así de brusco, pero no se ve una mierda lo que escribes con la publicidad de Google, espero que no te siente mal esta critica y por si te sirve de algo, la he visionado con el Firefox 2.0
ResponderEliminarSaludos, Gutx0
Perdona que te lo diga así de brusco, pero no se ve una mierda lo que escribes con la publicidad de Google, espero que no te siente mal esta critica y por si te sirve de algo, la he visionado con el Firefox 2.0
ResponderEliminarSaludos, Gutx0
Eso sucede cuando tienes alguna barra lateral o la resolución de pantalla es baja. En ese caso el espacio no alcanza y la sección de anuncios se monta sobre el texto.
ResponderEliminar