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.

This talk has been presented at JS GameDev Summit 2022, check out the latest edition of this JavaScript Conference.

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
Today's Talk discusses the importance of managing technical debt through refactoring practices, prioritization, and planning. Successful refactoring requires establishing guidelines, maintaining an inventory, and implementing a process. Celebrating success and ensuring resilience are key to building a strong refactoring culture. Visibility, support, and transparent communication are crucial for addressing technical debt effectively. The team's responsibilities, operating style, and availability should be transparent to product managers.
Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Debugging JavaScript is a crucial skill that is often overlooked in the industry. It is important to understand the problem, reproduce the issue, and identify the root cause. Having a variety of debugging tools and techniques, such as console methods and graphical debuggers, is beneficial. Replay is a time-traveling debugger for JavaScript that allows users to record and inspect bugs. It works with Redux, plain React, and even minified code with the help of source maps.
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
PlayCanvas is an open-source game engine used by game developers worldwide. Optimization is crucial for HTML5 games, focusing on load times and frame rate. Texture and mesh optimization can significantly reduce download sizes. GLTF and GLB formats offer smaller file sizes and faster parsing times. Compressing game resources and using efficient file formats can improve load times. Framerate optimization and resolution scaling are important for better performance. Managing draw calls and using batching techniques can optimize performance. Browser DevTools, such as Chrome and Firefox, are useful for debugging and profiling. Detecting device performance and optimizing based on specific devices can improve game performance. Apple is making progress with WebGPU implementation. HTML5 games can be shipped to the App Store using Cordova.
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
This Talk discusses building a voice-activated AI assistant using web APIs and JavaScript. It covers using the Web Speech API for speech recognition and the speech synthesis API for text to speech. The speaker demonstrates how to communicate with the Open AI API and handle the response. The Talk also explores enabling speech recognition and addressing the user. The speaker concludes by mentioning the possibility of creating a product out of the project and using Tauri for native desktop-like experiences.
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
This Talk explores the use of Babylon.js and WebXR to create immersive VR and AR experiences on the web. It showcases various demos, including transforming a 2D game into a 3D and VR experience, VR music composition, AR demos, and exploring a virtual museum. The speaker emphasizes the potential of web development in the metaverse and mentions the use of WebXR in Microsoft products. The limitations of WebXR on Safari iOS are discussed, along with the simplicity and features of Babylon.js. Contact information is provided for further inquiries.
Solucionando Problemas de Rendimiento en React
React Advanced Conference 2023React Advanced Conference 2023
22 min
Solucionando Problemas de Rendimiento en React
Top Content
This Talk discusses various strategies to improve React performance, including lazy loading iframes, analyzing and optimizing bundles, fixing barrel exports and tree shaking, removing dead code, and caching expensive computations. The speaker shares their experience in identifying and addressing performance issues in a real-world application. They also highlight the importance of regularly auditing webpack and bundle analyzers, using tools like Knip to find unused code, and contributing improvements to open source libraries.

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.
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Node Congress 2024Node Congress 2024
152 min
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Featured Workshop
Emanuel Scirlet
Miguel Henriques
2 authors
Ven y aprende cómo puedes potenciar tus aplicaciones modernas y seguras utilizando GraphQL y Javascript. En este masterclass construiremos una API de GraphQL y demostraremos los beneficios del lenguaje de consulta para APIs y los casos de uso para los que es adecuado. Se requiere conocimiento básico de Javascript.
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.
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.
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.