En los juegos en línea, las personas prefieren iniciar y cerrar sesión cuando lo deseen. Por lo general, sus logros en el juego se guardan sin problemas en el servidor. Eso no es tan difícil de lograr, pero me pregunto cómo se puede hacer de una manera eficiente que tenga sentido y escalará.
¿Tiene sentido guardar las coordenadas y el estado del jugador cada vez que lo envían? Mi servidor node.js puede hacerlo fácilmente sin bloquear una respuesta, y quiero emplear una base de datos Mongo, pero ¿tal vez sea más apropiado hacerlo una vez por segundo y en un evento de todo el servidor, recolectando todo de una vez?
Respuestas:
Tengo en mente un MMORPG tradicional como World of Warcraft.
Guardar después de cada comando de cada jugador y cosa autónoma (por ejemplo, NPC)
Guarda todo periódicamente
Guarde un personaje al cerrar sesión (no guarde nada más)
Pensamientos finales
Por último, no tome este consejo como la verdad absoluta. No he escrito un sistema de copia de seguridad multijugador. Yo estoy trabajando en un "juego" en línea, por lo que he pensado en esto y escribió un vistazo a mis pensamientos más arriba, pero no he llegado a la etapa de implementación de esto todavía. Así que esto está escrito sin experiencia real, pero después de mucha lectura y recopilación de conocimientos sobre el tema.
fuente
Supongo que depende del tipo de juego y la cantidad de tráfico entre los jugadores y el servidor.
En un MMORPG, no tendría sentido guardar la posición de los jugadores cada vez que envían la información al servidor. Tendría más sentido actualizar cuando los datos actuales del jugador estén "obsoletos", por así decirlo. También podría ser beneficioso salvar el estado del jugador en eventos importantes como cruzar a un nuevo territorio, derrotar a un jefe o salir de una tienda.
En un juego por turnos, definitivamente tendría sentido salvar el estado del jugador cada vez que termine su turno, así como después del turno de un jugador contrario (guardar pérdida de salud, efectos de hechizo, etc.).
Nuevamente, la respuesta depende completamente de la escala y las capacidades de su servidor. Se trata de encontrar el mejor equilibrio y optimizar tanto como sea posible sin sacrificar la calidad.
fuente
Si su única preocupación es cuando cierran la sesión, entonces una respuesta simple es guardar su posición cuando se produzcan las condiciones para ellos que ya no existan en el mundo del juego (debido a cerrar sesión o desconectarse).
En una nota al margen, sin embargo, desconfiaría un poco del cliente que informa al servidor su posición, o al menos sin alguna forma de verificación de la cordura del lado del servidor. Sin embargo, si ya tiene esto en su lugar, es probable que pueda guardar esa posición al cerrar sesión o desconectarse, ya que no tiene que preocuparse por obtener datos directamente del cliente.
fuente