Buenas,
tengo un mente un proyecto, en el que me surgen algunas dudas para la parte online.
Resumiendo el juego, son partidas rápidas de unos 2 minutos de duración, en un juego arcade de un jugador, donde todo el mundo empieza al mismo tiempo la partida y la idea es que la parte online sean las puntuaciones en tiempo real donde en una parte de la pantalla se mostrara un top10 y la posición actual del jugador.
He pensado formas, pero creo que todavía no he encontrado la mejor forma de hacerlo. Una de ellas sería a lo bruto, o mantengo las posiciones actualizadas en el servidor y cada vez que alguien consigue una nueva posición la inserto y ordeno de nuevo, con lo que estaría continuamente trabajando el servidor, y dependiendo el número de jugadores puede ser muy costoso (pienso así de primeras, con bastantes años de experiencia en desarrollo pero muy poquito en online).
Otra forma es que sea el jugador el que ordena esas listas, aunque aquí el problema es en la cantidad de datos innecesarios que tiene que estar recibiendo continuamente. Sí, puedo tener un evento que realice una llamada cada vez que se actualice la lista de puntuaciones, pero el jugador deberá recibir todo el ranking y el ordenarlo, cuando en verdad solo va a necesitar los 10 o 20 primeros puestos y su posición.
En los dos métodos, está claro que solo se actualiza la tabla de puntuaciones cuando la puntuación del jugador es superior a su record anterior.
Tengo experiencia en Firebase nosql y he realizado pruebas con él, también he probado con sql, pero en realidad no sé bien como orientarlo correctamente para no sufrir problemas en un futuro y si la cosa funciona que tenga una buena escala desde un principio.
Otra de las dudas que tengo, es al ser la parte online solo las puntuaciones, si me va a ir mejor crear un servidor que se encargue de manejar todo el tema de empezar partidas y terminar todos a la vez, manejar puntuaciones, etc o sería mejor que todo lo gestionarán los usuarios, que siempre haya un master que se encargué de eso y cuando se desconecta otro jugador pase a ser el master.
De ser la mejor opción un servidor que me recomendáis, Node, Python, Unet (trabajo con unity), el mismo firebase con cloud functions? El juego es para móviles, IOS y Android.
Perdón por el tocho, espero haberme explicado bien, quería dejar claras las dudas.
Gracias, y un saludo.
Edit: Nada, se me olvidó poner un post que tengo en favoritos de stackoverflow, donde se habla del tema. Una de las respuestas es de lo mejor que he encontrado sobre el tema.
https://stackoverflow.com/questions/46720997/leaderboard-ranking-with-firebase