Creación de Juegos Multijugador con Colyseus, Node.js y TypeScript

Rate this content
Bookmark

Al interactuar con la comunidad de Colyseus durante los últimos años, algunas preguntas fundamentales (no necesariamente conectadas con el marco de trabajo) parecen surgir una y otra vez cuando los desarrolladores comienzan a construir sus propios juegos multijugador. Esta charla va a cubrir algunas de estas preguntas, así como los escenarios y técnicas más comunes que puedes empezar a usar hoy en día al construir tu propio juego multijugador.

FAQ

Actualmente, las tecnologías principales para conexiones bidireccionales en la web son WebSockets y WebRTC. WebSockets es una tecnología basada en TCP disponible desde 2011, mientras que WebRTC es más reciente y maneja tanto conexiones confiables como no confiables.

Coliseus es un framework de Node.js diseñado para crear juegos multijugador. Ofrece características como emparejamiento de jugadores en salas, sincronización de salas, un sistema de mensajes integrado, y la arquitectura necesaria para escalar a muchos servidores que manejen múltiples salas.

En Coliseus, las salas solo se crean cuando un cliente solicita unirse o crearlas. El cliente hace una solicitud HTTP para una reserva de asiento, y si la sala no existe, el servidor intenta crear una. Después, el cliente se conecta a la sala a través de WebSockets.

Se sugieren técnicas como la predicción del lado del cliente, donde las entradas de los jugadores se procesan inmediatamente en el cliente mientras el servidor valida y ajusta. Esto ayuda a mejorar la experiencia percibida de respuesta inmediata, mitigando los efectos de la latencia.

Las conexiones máximas que puede manejar un servidor dependen del tipo de juego y la capacidad del servidor. En un ejemplo dado, un servidor económico podría manejar 3,000 conexiones concurrentes para un juego de ritmo lento, pero se recomienda limitar de 50 a 100 conexiones por sala para optimizar el rendimiento.

Coliseus ofrece un cliente disponible para Unity que permite la integración con esta plataforma. Los desarrolladores pueden encontrar el cliente y más información en el sitio web de Coliseus y su repositorio de GitHub.

Endel Dreyer
Endel Dreyer
31 min
07 Apr, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La charla de hoy cubre la creación de juegos multijugador con Coliseus, Node.js y Typescript. Explora el estado de la red en la web, servidores alternativos y cómo funciona Coliseus. La charla también discute la predicción del lado del cliente, la compensación de la latencia, las limitaciones del servidor, la escalabilidad y muestra juegos geniales hechos con Coliseus. Además, menciona la integración de Nakama y Unity para la predicción del lado del cliente en juegos multijugador. Coliseus está disponible en móviles y se puede encontrar en colossus.io o en el repositorio de GitHub.

1. Introducción a Coliseus y Networking

Short description:

Hoy, voy a hablar sobre cómo hacer juegos multijugador con Coliseus, Node.js y Typescript. Discutiremos el estado de la red en la web, servidores alternativos, cómo funciona Coliseus, técnicas del lado del cliente y juegos multijugador construidos con Coliseus. El estado de la red en la web actualmente depende de WebSockets y WebRTC, con la posible inclusión futura de Web Transport. Mientras que TCP es la única opción para juegos basados en la web, generalmente se prefiere UDP. Sin embargo, muchos juegos exitosos se han hecho usando TCP y WebSockets.

Hola, hola, a todos. Soy Enzo, el creador de Coliseus, y hoy voy a hablar sobre cómo hacer juegos multijugador con Coliseus, Node.js y Typescript. Estoy muy emocionado de estar aquí.

Entonces, los temas de esta charla son el estado de la red en la web, servidores alternativos, cómo funciona Coliseus y sus sistemas internos, algunas técnicas del lado del cliente que puedes aplicar incluso fuera del alcance de Coliseus, y algunos juegos multijugador construidos con Coliseus.

Entonces, el estado de la red en la web. Ahora mismo tenemos, para conexiones bidireccionales, tenemos principalmente WebSockets y WebRTC disponibles. Web Transport, con suerte, va a llegar en el futuro. WebSockets es solo TCP y está disponible desde 2011. WebRTC ha sido completamente estandarizado solo en el último año y es bastante complicado e involucra muchos otros protocolos y sí admite conexiones confiables y no confiables. WebTransport, con suerte, va a reemplazar a WebSocket en el futuro. Nadie sabe cuándo. Y es muy emocionante. Admite la entrega confiable y no confiable y tiene soporte experimental ya en Chrome desde enero de este año. El advice general para la red fuera de la web es que TCP no es ideal para juegos y UDP sí, es difícil estar en desacuerdo con esto, pero desafortunadamente la web solo tiene TCP por ahora. Con suerte, el transporte web cambiará eso en el futuro y muchos juegos exitosos se han hecho en el pasado usando TCP y WebSockets es lo que tenemos y hay muchos juegos exitosos hechos con WebSockets.

2. Servidores Alternativos y el Framework Coliseus

Short description:

En un enfoque alternativo, el servidor valida y determina el estado del juego, en lugar de depender del cliente. Coliseus es un framework de Node.js que utiliza WebSockets para el transporte. Proporciona emparejamiento, sincronización de salas y mensajería. Las salas en Coliseus tienen métodos de ciclo de vida y pueden crearse cuando los clientes solicitan unirse o crearlas. El flujo de emparejamiento implica una solicitud HTTP para la reserva de asiento, la consulta de salas existentes, la creación de una sala si es necesario y el establecimiento de una conexión WebSocket. Una vez establecida la conexión, el cliente recibe el estado completo de la sala y puede comenzar a intercambiar mensajes.

Bien, sin más preámbulos hablemos de servidores alternativos. Así que en un enfoque alternativo no confiarías en el cliente, por lo que el cliente puede decir, por ejemplo, dónde está o el cliente nunca debería dictar información. El servidor siempre debería ser capaz de validar y decir la verdad sobre el estado del juego. Así que esto no es muy alternativo, podría estar bien si estás de acuerdo con esto, así que esto no sería factible en un juego competitivo multijugador.

Así que una alternativa a esto es dar más, dar menos información al servidor. Digamos que estoy apuntando a un cierto ángulo y avanzando, así que el servidor tiene la posición actual y va al servidor va a determinar cuál es la siguiente y no el cliente. Así que esto es alternativo, las responsabilidades del servidor son mantener la lógica del juego, el estado del juego, validar las entradas del cliente e intercambiar mensajes con los clientes y también el estado. Las responsabilidades del cliente es básicamente ser una representación visual de lo que está en el servidor y enviar entradas y acciones al servidor. Lo que Coliseus aporta a la mesa, es un Node.js framework. Está construido solo con WebSockets, así que solo hay WebSocket como capa de transporte hasta ahora en Coliseus. Empareja a los jugadores en salas y tiene una sincronización de salas incorporada y sistema de mensajes. Y tiene los bloques de construcción y la arquitectura para que puedas escalar esto a muchos servidores y tener muchos servidores que manejen múltiples salas. Y como puedes ver, las salas es un bloque muy básico de Coliseus, y así es como se ve una definición de sala, y tiene sus métodos de ciclo de vida, como onCreate para configurar una partida, onJoin cuando algún jugador se une a la sala, onLeave para eliminar a este jugador del estado de la sala y los otros clientes pueden reaccionar a este cambio, y onDispose cuando esta sala ha sido destruida en el servidor. Si tienes un estado global compartido o algo en la base de datos, este es un buen lugar para borrar cosas globales que esta sala posiblemente ha creado. Para que los clientes se unan a esta sala, necesitas exponer esto al emparejador. Verás que no se crea ninguna sala real en este punto. Las salas solo se crean cuando el cliente solicita unirse o crearlas. En este ejemplo, es el cliente el que solicita unirse a una sala de juego y proporciona información sobre sí mismo, como el nombre. Para la solicitud de emparejamiento, así es como se ve el flujo. El cliente hace una solicitud HTTP para pedir una reserva de asiento. El servidor va a consultar las posibles salas que ya existen. Si no existe, intenta crear una y devuelve el ID de la sala y el ID de la sesión, que es la reserva de la sesión. Después de obtener la reserva de la sesión, intenta conectarse realmente a través de web sockets. Así es como se ve el flujo desde la perspectiva del servidor. Primero intenta validar al usuario durante el inicio de sesión. Esto es totalmente personalizado y basado en tus propios requisitos. Si eso tiene éxito, intenta llamar a on join. En cualquier momento, podrías lanzar un error aquí y el cliente llegaría al bloque catch aquí. Sí, podrías lanzar un error desde el servidor y aquí iría en el cliente. No ha ocurrido ningún error durante este proceso, la conexión se establece, y después de que se establece la conexión, lo primero es que el cliente recibe el estado completo de la sala, por lo que el cliente ya puede construir la representación visual que esa sala tiene en el servidor y empezar a intercambiar mensajes y más parches de estado y más mensajes, y luego es regular web socket y cosas bidireccionales.

QnA

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Un Marco para Gestionar la Deuda Técnica
TechLead Conference 2023TechLead Conference 2023
35 min
Un Marco para Gestionar la Deuda Técnica
Top Content
Seamos realistas: la deuda técnica es inevitable y reescribir tu código cada 6 meses no es una opción. La refactorización es un tema complejo que no tiene una solución única para todos. Las aplicaciones de frontend son particularmente sensibles debido a los frecuentes cambios de requisitos y flujos de usuario. Nuevas abstracciones, patrones actualizados y limpieza de esas viejas funciones - todo suena genial en papel, pero a menudo falla en la práctica: los todos se acumulan, los tickets terminan pudriéndose en el backlog y el código legado aparece en cada rincón de tu base de código. Por lo tanto, un proceso de refactorización continua es la única arma que tienes contra la deuda técnica.En los últimos tres años, he estado explorando diferentes estrategias y procesos para refactorizar el código. En esta charla describiré los componentes clave de un marco para abordar la refactorización y compartiré algunos de los aprendizajes acumulados en el camino. Espero que esto te ayude en tu búsqueda de mejorar la calidad del código de tus bases de código.

Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Como desarrolladores, pasamos gran parte de nuestro tiempo depurando aplicaciones, a menudo código que ni siquiera escribimos. Lamentablemente, a pocos desarrolladores se les ha enseñado cómo abordar la depuración, es algo que la mayoría de nosotros aprendemos a través de la experiencia dolorosa. La buena noticia es que _puedes_ aprender a depurar de manera efectiva, y hay varias técnicas y herramientas clave que puedes usar para depurar aplicaciones de JS y React.
Optimización de juegos HTML5: 10 años de aprendizaje
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Optimización de juegos HTML5: 10 años de aprendizaje
Top Content
El motor de juegos de código abierto PlayCanvas está construido específicamente para el navegador, incorporando 10 años de aprendizaje sobre optimización. En esta charla, descubrirás la salsa secreta que permite a PlayCanvas generar juegos con tiempos de carga increíblemente rápidos y tasas de fotogramas sólidas como una roca.
Construyendo Experimentos Divertidos con WebXR & Babylon.js
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Construyendo Experimentos Divertidos con WebXR & Babylon.js
Top Content
Durante esta sesión, veremos un par de demostraciones de lo que puedes hacer usando WebXR, con Babylon.js. Desde experimentos de audio en VR, hasta juegos casuales en VR en una máquina de arcade hasta un uso más serio para crear nuevas formas de colaboración usando AR o VR, deberías tener una comprensión bastante buena de lo que puedes hacer hoy.
Consulta también el artículo para ver el contenido completo, incluyendo ejemplos de código: artículo. 
Construyendo un Asistente AI Activado por Voz con Javascript
JSNation 2023JSNation 2023
21 min
Construyendo un Asistente AI Activado por Voz con Javascript
Top Content
En esta charla, construiremos nuestro propio Jarvis utilizando Web APIs y langchain. Habrá codificación en vivo.
Solucionando Problemas de Rendimiento en React
React Advanced Conference 2023React Advanced Conference 2023
22 min
Solucionando Problemas de Rendimiento en React
Top Content
Next.js y otros marcos de trabajo que envuelven a React proporcionan un gran poder en la construcción de aplicaciones más grandes. Pero con gran poder viene una gran responsabilidad de rendimiento - y si no prestas atención, es fácil añadir varios segundos de penalización de carga en todas tus páginas. ¡Vaya! Vamos a recorrer un estudio de caso de cómo unas pocas horas de depuración de rendimiento mejoraron tanto los tiempos de carga como los de análisis para la aplicación Centered en varios cientos por ciento cada uno. Aprenderemos no solo por qué ocurren esos problemas de rendimiento, sino cómo diagnosticarlos y solucionarlos. ¡Viva el rendimiento! ⚡️

Workshops on related topic

Crea un Juego Con PlayCanvas en 2 Horas
JSNation 2023JSNation 2023
116 min
Crea un Juego Con PlayCanvas en 2 Horas
Top Content
Featured WorkshopFree
Steven Yau
Steven Yau
En esta masterclass, construiremos un juego utilizando el motor WebGL de PlayCanvas desde el principio hasta el final. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la escritura de scripts, la creación de UI y mucho más.
Tabla de contenido:- Introducción- Introducción a PlayCanvas- Lo que vamos a construir- Agregando un modelo de personaje y animación- Haciendo que el personaje se mueva con scripts- 'Falsa' carrera- Agregando obstáculos- Detectando colisiones- Agregando un contador de puntuación- Fin del juego y reinicio- ¡Resumen!- Preguntas
Nivel de la masterclassSe recomienda familiaridad con los motores de juegos y los aspectos del desarrollo de juegos, pero no es obligatorio.
Construyendo una Aplicación de Shopify con React & Node
React Summit Remote Edition 2021React Summit Remote Edition 2021
87 min
Construyendo una Aplicación de Shopify con React & Node
Top Content
WorkshopFree
Jennifer Gray
Hanna Chen
2 authors
Los comerciantes de Shopify tienen un conjunto diverso de necesidades, y los desarrolladores tienen una oportunidad única para satisfacer esas necesidades construyendo aplicaciones. Construir una aplicación puede ser un trabajo duro, pero Shopify ha creado un conjunto de herramientas y recursos para ayudarte a construir una experiencia de aplicación sin problemas lo más rápido posible. Obtén experiencia práctica construyendo una aplicación integrada de Shopify utilizando el CLI de la aplicación Shopify, Polaris y Shopify App Bridge.Te mostraremos cómo crear una aplicación que acceda a la información de una tienda de desarrollo y pueda ejecutarse en tu entorno local.
PlayCanvas de principio a fin: la versión rápida
JS GameDev Summit 2022JS GameDev Summit 2022
121 min
PlayCanvas de principio a fin: la versión rápida
Top Content
WorkshopFree
João Ruschel
João Ruschel
En esta masterclass, construiremos un juego completo utilizando el motor PlayCanvas mientras aprendemos las mejores prácticas para la gestión de proyectos. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la gestión de activos, scripting, audio, depuración, y mucho más.
Construye una sala de chat con Appwrite y React
JSNation 2022JSNation 2022
41 min
Construye una sala de chat con Appwrite y React
WorkshopFree
Wess Cope
Wess Cope
Las API/Backends son difíciles y necesitamos websockets. Utilizarás VS Code como tu editor, Parcel.js, Chakra-ui, React, React Icons y Appwrite. Al final de este masterclass, tendrás los conocimientos para construir una aplicación en tiempo real utilizando Appwrite y sin necesidad de desarrollar una API. ¡Sigue los pasos y tendrás una increíble aplicación de chat para presumir!
Problemas difíciles de GraphQL en Shopify
GraphQL Galaxy 2021GraphQL Galaxy 2021
164 min
Problemas difíciles de GraphQL en Shopify
WorkshopFree
Rebecca Friedman
Jonathan Baker
Alex Ackerman
Théo Ben Hassen
 Greg MacWilliam
5 authors
En Shopify a gran escala, resolvemos algunos problemas bastante difíciles. En este masterclass, cinco oradores diferentes describirán algunos de los desafíos que hemos enfrentado y cómo los hemos superado.

Tabla de contenidos:
1 - El infame problema "N+1": Jonathan Baker - Vamos a hablar sobre qué es, por qué es un problema y cómo Shopify lo maneja a gran escala en varios APIs de GraphQL.
2 - Contextualizando APIs de GraphQL: Alex Ackerman - Cómo y por qué decidimos usar directivas. Compartiré qué son las directivas, qué directivas están disponibles de forma predeterminada y cómo crear directivas personalizadas.
3 - Consultas de GraphQL más rápidas para clientes móviles: Theo Ben Hassen - A medida que tu aplicación móvil crece, también lo harán tus consultas de GraphQL. En esta charla, repasaré diversas estrategias para hacer que tus consultas sean más rápidas y efectivas.
4 - Construyendo el producto del futuro hoy: Greg MacWilliam - Cómo Shopify adopta las características futuras en el código actual.
5 - Gestión efectiva de APIs grandes: Rebecca Friedman - Tenemos miles de desarrolladores en Shopify. Veamos cómo estamos asegurando la calidad y consistencia de nuestras APIs de GraphQL con tantos colaboradores.
De 0 a Autenticación en una Hora para tu Aplicación JavaScript
JSNation 2023JSNation 2023
57 min
De 0 a Autenticación en una Hora para tu Aplicación JavaScript
WorkshopFree
Asaf Shen
Asaf Shen
La autenticación sin contraseña puede parecer compleja, pero es fácil de agregar a cualquier aplicación utilizando la herramienta adecuada.
Mejoraremos una aplicación JS de pila completa (backend Node.js + frontend Vanilla JS) para autenticar usuarios con contraseñas de un solo uso (correo electrónico) y OAuth, incluyendo:
- Autenticación de usuario: Gestión de interacciones de usuario, devolución de JWT de sesión / actualización- Gestión y validación de sesiones: Almacenamiento seguro de la sesión para solicitudes posteriores del cliente, validación / actualización de sesiones
Al final del masterclass, también abordaremos otro enfoque para la autenticación de código utilizando Flujos de Descope en el frontend (flujos de arrastrar y soltar), manteniendo solo la validación de sesión en el backend. Con esto, también mostraremos lo fácil que es habilitar la biometría y otros métodos de autenticación sin contraseña.