Open beta Bomb.town

B

#28 Uso Unity en forma headless porque es una solución fiable, testada, y que tiene muy buen rendimiento, manteniendo mi background en C# para cosas complejas que hay en server side. No uso el Networking de unity como supone #29, sólo uso Unity para tener una copia física del mundo y poder hacer las comprobaciones necesarias cuando un player mata a otro, cuando se consumen powerups, o cuando pasa casi cualquier cosa lógica en el juego. De esta forma tienes una solución autoritativa sin invertir mucho tiempo, y encima solución completa porque si eres un ex Unity Dev como es mi caso sabrás cómo estrujar al máximo todas las características de Unity y cómo sacar el máximo rendimiento.

Y sí, es de las soluciones más correctas por su fiabilidad. Ten en cuenta que juegos tan enormes como Rocket League usan una copia de su cliente como servidor. En el caso de Rocket League, Unreal Engine tiene también un modo servidor. PUBG más de lo mismo, los dos usan Unreal como backend.

Hace tres años, cuando empecé en esto del webgaming multiplayer probé NodeJS con WebSockets como todo el mundo, pero la verdad es que no me gusta nada tener JS en backend ya que es un lenguaje en el que muchas cosas pueden estar yendo mal sin darte ni cuenta hasta que el GC empieza a petar y te das cuenta de que tienes CPU o Memory leaks.

Para el que desarrolle apps de mierda le vale de sobra nodejs, pero para juegos en tiempo real y que estén pensados para ser jugados por cientos de forma simultánea, no vale.

Como ejemplo: blastarena.io en su día, cuando aún era yo el dueño, quizá era capaz de mantener 150-200 players simultáneos en un servidor de 30€ mensuales (era nodejs con websockets). Con Netgain (sin lógica alguna server side), habrían sido más de 400. Y con lógica depende de a qué ritmo estés simulando el mundo.

A nivel de networking estoy usando una librería que StackOverflow diseñó para sus sistemas desarrollados en C#. Se llama Netgain. Junto a una pequeña lib que me hice para leer y escribir paquetes binarios rápidamente.

Así que sinceramente, es una ridiculez ponerte a picar todo de 0 en 2019, donde hay librerías y motores que están hyper testados y que usan juegos AAA.

2 respuestas
B

#31

No uso el Networking de unity como supone #29

@midgar

Unity no tiene soporte nativo WebSocket en builds standalone ergo no tengo nada que suponer...

edit: cuando estabas con node deberías haber probado TypeScript

1 respuesta
JohnVoiden

#31 Pero en tu caso, estás desarrollando el juego dos veces. En diferentes lenguajes y tecnologías. Y la excusa de picar todo desde 0 tiene caspa hasta aburrir, que me digas que te sale del los cojones moneros estaría mejor, sin acritud, pero es así.
Si con un server de 30 euros solo eres de capaz de mantener 200 usuarios, no es problema del lenguaje, es problema tuyo, no echemos la culpa a los demás de las cosas de que somos totalmente culpables.
Pero agradezco que hayas resuelto la duda del server-side.

1 respuesta
B

#32 Entonces no sé para qué enlazaste el Networking de Unity si ya sabías que no lo podría estar usando xD

#33 Jajaja joder macho, se nota que no has emprendido en tu vida.

La clave está en que hoy en día nadie tiene un presupuesto para desarrollar absolutamente todo desde 0. Para eso están las librerías y motores. Para hacer que algo que de entrada no saldría rentable, salga rentable y además de forma acelerada.

Y correcto, blastarena.io mantenía 200 usuarios simultáneos de forma mágica, porque los paquetes ni siquiera estaban en forma binaria, se enviaban en JSON. Imagínate, cientos de miles de paquetes siendo enviados, procesados y vueltos a enviar. Overhead brutal. Pero bueno, he crecido bastante en ese aspecto de saber qué hacer para optimizar la red de un juego y que las cosas salgan mucho mejor.

Aún así, no es tan fácil como piensas hacer un juego fast-paced y meter cientos de personas en un mismo punto sin que la cosa empiece a ir mal. Por eso no ves un Battlefield con 1000 personas, y por eso el WoW hoy en día tiene sistemas de instancias que hacen que llegados a cierto punto, los servidores repartan la carga diversificando, ese es el truco para la mayoría de casos.

2 respuestas
JohnVoiden

#34 Estoy planteado como hacerte la contestación. Porque entiendo que no sepas de mi vida, pero hacer declaraciones de que no he emprendido en mi vida, es algo que supones, entiendo tu ignorancia, pero no me metas en un saco que no correspondo.

"Hoy en día nadie tiene un presupuesto...", es casposo y una afirmación que no es cierta, si, se utilizan tecnologias de terceros para desarrollar tu software, pero no es una excusa para hacer sobreingenieria y por supuesto que tampoco lo es para recriminar a las tecnologias por tus cagadas en el código.
Recuerda, todas las tecnologias tienen un uso y normalmente somos los programadores que les ponemos limites de eficiencia.

Tengo poca experiencia en juegos "fast-paced", pero si tengo experiencia en benchmarks en backends con cantidades inhumanas de peticiones al segundo, y el clustering es la alternativa más inteligente en estos casos, al final es más sencillo tener microservicios que te tiren specs muy especificas de tu producto, el precio del mantenimiento puede aumentar, pero tienes la escabilidad mucho más controlada. Nunca escalado vertical, solo horizontal.

1 respuesta
B

#34 si te fijas #29 era una respuesta a #25 para hacerle notar que con las herramientas nativas de Unity se puede hacer backend... algo que le parecía extraño.

La reseña fué una colación... para nada relacionada contigo ni tu proyecto.

1 respuesta
B

#35 Si te he contestado así es por las formas en las que me has contestado tú. Además ya nos conocemos, hace tiempo que no sé de ti pero sinceramente nunca te he visto del palo emprendedor.

"Hoy en día nadie tiene prespuesto" para hacer salvajadas como ignorar el trabajo hecho por los demás hasta día de hoy y simplemente meterte a hacer tú las cosas desde 0 porque sí. Es de locos.

Yo les propongo a mis clientes que quiero hacerles el producto en WebGL desde cero, sin usar motores ni frameworks existentes, y también que quiero programar los servidores desde 0, sin usar ninguna librería que pueda hacer el trabajo mejor de lo que yo lo haría en este momento, y puede que me digan ok muy bien, pero al decirles la cantidad de tiempo necesitada en comparación a usar soluciones existentes, obviamente me van a tirar el presupuesto atrás. Es mucho tiempo que se transforma en mucho dinero porque mi precio por hora no es bajo tampoco.

Y nunca he dicho que una tecnología sea mala porque sí. He dicho que nodejs no es la mejor opción para juegos multiplayer en tiempo real, será la mejor para otras cosas, pero no para esto. Y es una idea que me he hecho tras: Experiencia de haberlo usado durante años y experiencias de otros desarrolladores con juegos muchos más grandes que los míos.

Es más, ahora estoy usando nodejs para desarrollar un servicio de logins y progresión para un proyecto propio, y para tener un middleman entre cliente<->gameserver<->progresión porque la cantidad de procesamiento en comparación es mucho más tranquila y relajada que lo que está procesando en tiempo real el gameserver. Así que en este nuevo proyecto estoy usando: JS nativo, NodeJS con paquetes C++, Unity y C#. Y me parece una combinación indestructible!

Así que créeme, si he elegido esta opción de usar PlayCanvas client side y Unity en server side, ha sido porque era la mejor opción para mí y para mi cliente en este proyecto. Y ya te he puesto ejemplos reales de juegos AAA que usan soluciones parecidas. Hoy en día el que se lo pique todo desde 0 sólo es para aprender sobre el proceso o porque está muy loco y tiene todo el tiempo y dinero del mundo, ya me gustaría a mí, pero vivimos en el mundo real y yo tengo que pagar facturas a final de mes.

#36 Okey pero para eso ya lo citó el otro user zoomeando la opción "headless" en la build de linux, que es precisamente la que yo uso jajaja

1 respuesta
B

#37 el otro user era yo...

edit: por cierto, como va la carga del server del bomb.town? users de media?

1 respuesta
B

#38 Ahora mismo muy baja (unos 200 users a lo largo del día), pero es verano y hemos pausado la promo hasta mediados de Septiembre, ahí veremos si realmente el proyecto gusta o no.

Hay 2 actualizacones grandes en camino que caerán antes de eso:

  • Una última de optimización, haciendo que todo el juego se renderice en unos 30 drawcalls (a diferencia de los 200 de ahora).
  • Y otra en donde se va a meter más contenido (ropa, bombas, más cosas que hacer en el mundo).