3 motivos por los que necesitas un servidor

El objetivo de este post es el de convencerte de que necesitas un servidor para tu juego o app, por pequeño que sea, y como sus ventajas superan a los inconvenientes con creces.

Durante el post te daré varios motivos por los que un servidor te puede ayudar, y mucho, en mejorar tu app, y no solo porque te permita cambios en caliente si tener que subir una nueva app a las stores, por otros motivos más relacionados con la rentabilidad de tu app y el pulido de esta.

Al final del post espero haberte convencido y que tu siguiente tarea en el roadmap sea introducir un servidor en tu juego y empieces a experimentar, dejando de lado las excusas de «es que nunca he trabajado con un servidor…», «es que no tengo tiempo para añadirlo…», «es que cuesta mucho…», «no podré pagarlo…», etc.

Como implementar un servidor en menos de 15 minutos

¿Qué es un servidor y qué opciones tengo?

Se me hace dificil explicar que es un servidor si entrar en detalles y tecnicismos, y si estás aquí seguramente sepas que es un servidor (ahora mismo estas utilizando uno para visitar esta web), pero voy a hacer un esfuerzo.

Un servidor es una maquina, o un proceso en una maquina, que ofrece un servicio. A este servicio le podemos hacer peticiones para que nos devuelva información, o podemos guardar datos en él.

En el caso de un videojuego, o una app, el servidor se puede encargar de:

  • Ejecutar la lógica.
  • Almacena los datos de los usuarios en el juego.
  • Almacena datos anónimos de los usuarios que nos permitirán analizar su comportamiento, como el tiempo que tarda en completar un puzzle, tiempo de sesión, etc.
  • Tabla de clasificaciones.
  • Matchmaking, enviar mensajes a otros usuarios y otras cosas de juegos online.

Cuando hablamos de una app que cuenta con un servidor, decimos que el servidor es el que está en la nube y el cliente es la app que el usuario tiene en su móvil, ordenador o consola.

Espero que con esta breve explicación hayas entendido mejor que es un servidor y cuales son algunas de sus funciones.

Vamos a pasar ahora a ver algunas de las opciones más populares que tenemos.

PlayFab

PlayFab es el servidor con el que más experiencia tengo, es muy fácil de utilizar y económico. Hace unos años PlayFab fue adquirido por Microsoft y por debajo utiliza tecnología Azure.

azure playfab

Este servidor es bastante popular en el mundo indie, y esto es porque ofrece unos buenos servicios y a un bajo coste, o gratis según la masa de usuarios que tengas. Las opciones de pago son 99$/mes o 1.999$/mes, si ya superas ciertos limites de usuarios tendrás que hablar con ellos para acordar un precio.

Además puedes utilizar el plan gratuito con limites, o el de 99$, y ampliar algunos limites concretos a cambio de un plus. Por ejemplo, en la versión gratuita solo podrás almacenar 3.000 objetos en el catalogo de items, si necesitas tener más objetos podrás ampliar solo este limite sin tener que pasar al siguiente tier de precios.

Algunos juegos que utilizan PlayFab son Idle Miner Tycon, AdVenture: Communist y Rainbow Six Siege. Este ultimo está en la web de PlayFab pero no estoy seguro de si utiliza PlayFab directamente o la tecnología de Azure y tiene su propio backend.

GameSparks

GameSparks es otro de los servicios para servidores de juegos más conocidos, seguro que has visto su logo en algún juego y tal vez no lo conocías. Aquí puedes ver un listado de algunos de los juegos que utilizan este servidor: showcase.

gamesparks

Como PlayFab, cuenta con varios tiers de precios, tenemos el gratuito con sus limitaciones, el siguiente sería por 299$/mes, y el siguiente ya es custom.

Una de las diferencias con PlayFab, además del precio, es que podemos programar la funcionalidad de nuestro servidor con funciones lambda, además de tener funcionalidades de testing integradas dentro de la plataforma.

Aunque si es tu primera vez con un servidor te recomiendo empezar con PlayFab ya que me parece más simple para iniciarse (no me pagan nada 😝)

Unity multiplay

Multiplay es el servicio de Unity, lo anunció hará unos años en una Unite y es relativamente nuevo, aunque le están dando mucha caña. No he tenido la suerte de probarlo, pero parece tener unas features interesantes.

Unity multiplay

Este servicio te permite configurar to sistema como quieras, eligiendo las instancias que quieres, como balancear la carga, etc. Esto puede ser una ventaja porque te permite gestionar los costes, pero a su vez es una desventaja porque te requiere de muchos conocimientos.

Para conocer el precio tenéis que contactar con ellos ya que depende de las necesidades de cada juego.

Uno de los juegos que utilizan este servicio es Apex Legends, podéis ver el caso de estudio en este vídeo.

Custom

Otra opción sería que te hicieras tu propio servidor, cosa que te desaconsejo totalmente, con las opciones que hay no le veo el beneficio de hacer tu propio servidor. Tal vez pienses que tener tu propio servidor te ayudará a ahorrar, pero no es así, tendrás que pagar por unos servidores donde tener tu servicio, como podría ser AWS.

Además tendrás que pagar el desarrollo, aunque lo hagas solo te va a costar tiempo, deberás de tener en cuenta muchas cosas que los servicios que he nombrado arriba ya han tenido en cuenta, y te tocará diseñar tu propio sistema distribuido, y mil cosas más.

Ventajas de tener un servidor

Analíticas centralizadas

La primera ventaja de la que os quiero hablar son las analíticas, partimos de la base que para mí es imprescindible tener analíticas en un juego o app. Sin analíticas estamos ciegos, solo podemos especular sobre lo que hacen los jugadores, o cuales son los motivos por los que dejan de jugar a nuestro juego.

Tener un servidor nos dará una serie de analíticas ya de base sin tener que hacer nada (solo integrar el servidor 😝). Podremos saber el número de usuarios activos que tenemos, el tiempo de sesión, la retención, los productos más comprados, la cantidad de dinero de media que invierte un jugador en nuestro juego, etc.

Además de estas analíticas «por defecto» que nos ofrece, podremos añadir las nuestras propias y tenerlas centralizadas en el mismo servidor, con lo que podremos consultarlas todas juntas y cruzar datos. Por ejemplo podremos lanzar un evento cada vez que un usuario entre en cierta pantalla, consuma un power up, o haga cierta acción.

Con estos datos después podremos hacer consultas como: ¿Cuántos usuarios utilizan este power up? ¿Cuántos usuarios completan el tutorial? ¿Cuántos usuarios que hayan invertido más de X dinero en nuestra app hacen esta acción? Etc.

Podrías pensar, y estarías en lo cierto, que en lugar de tener un servidor para analíticas puedes utilizar un servicio externo como Google Analytics, Firebase, Unity Analytics u otros. La desventaja de esto es que no todos te permitirán hacer segmentación y tests A/B dentro de tu app, y como veremos a continuación esto es muy potente e importante para iterar.

Segmentación y tests A/B

Posiblemente esta sea la razón de más peso para añadir un servidor a tu juego, o algún otro servicio que te ofrezca la posibilidad de segmentar a tus usuarios y ofrecerles cosas distintas según su comportamiento, que al final estará actuando como servidor.

Hacer un test A/B no es otra cosa que segmentar a tus usuarios en grupos, a cada grupo ofrecerle algo distinto y luego analizar los datos de su comportamiento para sacar conclusiones y mejorar la app.

test ab

Otra opción para la segmentación es que te permite lanzar una nueva feature y que solo esté disponible para una cantidad de gente, esto te permite sacar analíticas de esta feature, mejorarla y entonces abrirla para todo el mundo. Además te ayudará a depurarla y arreglar posibles errores sin que afecten a todo tus jugadores.

Con PlayFab podemos incluso decidir mostrarle una tienda a un número de usuarios y otra tienda distinta a otros usuarios basándonos en su comportamiento dentro del juego. Por ejemplo, podemos mostrarle productos ofertados a un usuario que lleva más de 4 semanas jugando pero que aún no ha comprado, y no mostrar esta oferta a un usuario que ya ha realizado compras dentro de la app.

Aquí os dejo un vídeo de la Unity de Berlin 2018 con un caso de estudio sobre Tests A/B con Unity, el porcentaje de mejora que consiguieron en varios aspectos de la app es enorme.

Cambios en caliente

Seguramente esta ventaja sea la favorita de los programadores, personalmente poder hacer cambios en caliente me ha salvado el culo, a mi equipo y al proyecto en el que trabajábamos, en más de una ocasión.

Con hacer cambios en caliente me refiero a que puedes modificar la lógica del juego sin tener que volver a subir una app a las stores de Google o Apple. Obviamente esto requerirá que toda la lógica y configuración de tu juego estén en el servidor.

Al tener la lógica en el servidor, podrás cambiar ese comportamiento y simplemente actualizar el servidor, esto te permitirá arreglar bugs de forma mucho más rápida ya que no tienes que esperar a que pase la validación de la stores.

También te va a permitir que cambies el balanceo de tu juego en tiempo real, puedes cambiar la recompensa que dan los niveles, la velocidad a la que se mueve el personaje, y en general todo lo que tengas en el servidor y no requiera de cambios en el cliente.

Está claro que si necesitas cambiar una respuesta del servidor, esto afectará al cliente y no podrás hacerlo, pero en la mayoría de casos, si has separado bien tu lógica, podrás aprovecharte de esta enorme ventaja.

Dificultades de tener un servidor

«Un gran poder conlleva una gran responsabilidad», esto es así y también lo podemos aplicar a los juegos o apps cliente-servidor. Tener un servidor nos va a implicar ser más cuidadosos con ciertas cosas que ahora pasaré a explicar.

cliente-servidor

Mantenimiento de versiones

Dado que tenemos nuestro código dividido entre cliente y servidor, y esto son dos entidades desacopladas, necesitamos que los dos vayan a la par. Si para una petición el servidor está devolviendo un Integer con la experiencia recibida en un nivel, mañana no podemos decidir cambiar esto por un Float ya que el cliente seguirá esperando un Integer.

Para hacer esto necesitamos una estrategia de actualizaciones. Una opción es no romper compatibilidad nunca, lo que implica que nunca borraremos o modificaremos los campos de respuesta. Esto a la larga acaba produciendo una cantidad de código legacy enorme.

Otra opción es hacer lo mismo que mencionamos arriba pero hasta cierta fecha, solo mantenemos 2 o 3 versiones antiguas y cuando venga la nueva borramos la más vieja. Esto implicará que debemos forzar al usuario a que se tenga que actualizar la app y mantener al día un changelog que nos permita identificar estos cambios.

La tercera opción sería tener un sistema de migraciones, este sistema se encarga de pasar la estructura de la versión 1 con el Integer a la versión 2 con el Float, esto nos evitará acumular legacy pero requerirá de una gran gestión por parte del equipo.

Adiós al modo offline

Otra dificultad de tener un servidor sería que nos obliga a estar siempre online, lo cual puede resultar una molestia según el tipo de juego que tengamos. Además tendremos que tener en cuenta que las peticiones pueden fallar y tendremos que reenviar la petición.

También podemos tener un plan B en las peticiones fallidas, o cuando estamos sin conexión, y hacer nuestro cliente un poco más inteligente o con respuestas por defecto. Obviamente esto requerirá de más gestión y no siempre lo podremos aplicar.

Esto también implicará que tenemos un servidor que mantener online, si este se cae por el motivo que sea nuestros usuarios no podrán utilizar el juego. Por suerte los servicios como PlayFab cuentan con replicación de servicios y es poco probable que nuestra app se vea afectada por una caída de estas, aunque podría pasar.

Conclusiones

Hemos visto algunas de las ventajas de tener un servidor, y algunas de sus desventajas. Desde mi punto de vista las ventajas superan a las desventajas, solo es cuestión de tener algunas cosas en cuenta y testear. Pero como ya hemos visto, tener un servidor nos aporta mucho.

Para mi el hecho de poder hacer tests A/B ya justifica tener un servidor. Por supuesto puedes utilizar servicios de analítica externos que también te ofrezcan hacer tests A/B, como podría ser Unity Analytics y Firebase.

Lo que está claro es que necesitas tener ojos en tu app y poder experimentar cuanto más y más rápido mejor. De esta forma podrás optimizar los resultados de tu app. Por no hablar de que la segmentación te permite publicar features solo a un grupo de gente y testear.

En cuanto a las cuestiones técnicas no hemos tratado ninguna sobre como implementar un servidor, esto es porque puede ser un poco difícil de explicar con texto, pero aquí te dejo un vídeo sobre como hacer las primeras llamadas a PlayFab utilizando Unity 😋.

Primeras llamadas a la API de PlayFab con Unity

Como siempre, si tienes cualquier duda o comentario, no dudes en hacérnosla llegar ya sea con comentarios en este post, en nuestras redes sociales Facebook y YouTube, o mediante el formulario de contacto.

Otras entradas

Resumen
3 motivos por los que necesitas un servidor en 【 2020 】
Nombre del artículo
3 motivos por los que necesitas un servidor en 【 2020 】
Descripción
En pleno【 2020 】tiene poco sentido no tener un SERVIDOR para nuestro JUEGO 🎮, o app, y utilizar analíticas para realizar TESTS A/B 🧐.
Autor
Publisher Name
The Power Ups - Learning
Publisher Logo

1 pensamiento sobre “3 motivos por los que necesitas un servidor”

Los comentarios están cerrados.