Pregunta

¿Cómo se crean los juegos de rol multijugador masivos en línea?

  • ¿En qué infraestructura de servidor están construidos? especialmente con tantos clientes conectados y comunicándose en tiempo real.

  • ¿Se manejan con scripts que se ejecutan en solicitudes de página? o servicios instalados que se ejecutan en segundo plano y gestionan la comunicación con clientes conectados?

  • ¿Utilizan otros protocolos? porque HTTP no permite que los servidores envíen datos a los clientes.

  • ¿Cómo funcionan los " motores " trabajo, para procesar centralmente cientos de eventos de juego conflictivos?

Gracias por su tiempo.

¿Fue útil?

Solución

¿En qué infraestructura de servidor están construidos? especialmente con tantos clientes conectados y comunicándose en tiempo real.

Supongo que los servidores se ejecutarán en Linux, BSD o Solaris casi el 99% del tiempo.

¿Se manejan con scripts que se ejecutan en solicitudes de página? o servicios instalados que se ejecutan en segundo plano y gestionan la comunicación con clientes conectados?

El servidor con el que habla su cliente será un servidor que ejecuta un demonio o servicio que está inactivo escuchando conexiones. Para las instancias (mazmorras), generalmente se inicia un nuevo proceso para cada grupo, lo que significaría que hay un servicio de despachador en algún lugar que maneja esto (análogo a un conjunto de hilos)

¿Utilizan otros protocolos? porque HTTP no permite que los servidores envíen datos a los clientes.

UDP es el protocolo utilizado. Es rápido ya que no garantiza que se reciba el paquete. No le importa si un poco de latencia hace que el cliente pierda su posición mundial.

¿Cómo funcionan los " motores " trabajo, para procesar de forma centralizada cientos de eventos de juego conflictivos?

La mayoría de los MMO tienen zonas que limitan esto a una cierta cantidad de personas. Para aquellos que tienen cientos de personas en un área, generalmente hay una alta latencia. El servidor tiene que lidiar con cientos de hechizos que se le envían, y debe calcular las cantidades de daño para cada uno. Para los cinco grandes MMOs, imagino que hay equipos de 10-20 desarrolladores muy inteligentes, dotados matemáticamente, que trabajan en esto diariamente y no hay un MMO que lo haya hecho bien todavía, la mayoría se rompe después de 100 jugadores.

-

Eche un vistazo a Wowemu (no hay un sitio oficial y yo no No quiero vincular a un sitio poco fiable). Esto se basa en ApireCore , que es un simulador MMO, o básicamente un ingeniero inverso del protocolo WoW . Esto es lo que corren los servidores privados de WoW. Por lo que recuerdo, Wowemu es

  • mySQL
  • Python

Sin embargo, ApireCore es C ++.

El backend para Wowemu es increíblemente simple (sin embargo, lo probé en 2005) y probablemente sea una simplificación completa del esquema de la base de datos. Te da una buena idea de lo que está involucrado.

Otros consejos

Muchos caminos conducen a Roma, y ??muchas arquitecturas conducen a MMORPG.

Estas son algunas ideas generales sobre sus viñetas:

  • La infraestructura del servidor debe admitir la capacidad de escalar horizontalmente ... agregar servidores adicionales a medida que aumenta la carga. Por cierto, esto es muy adecuado para Cloud Computing. Actualmente estoy ejecutando una gran aplicación de servicios financieros que necesita aumentar y disminuir según la hora del día y la época del año. Utilizamos Amazon AWS para agregar y eliminar servidores virtuales casi instantáneamente.
  • Los MMORPG con los que estoy familiarizado probablemente no usen servicios web para la comunicación (ya que no tienen estado) sino un programa personalizado del lado del servidor (por ejemplo, un servicio que escucha mensajes TCP y / o UDP).
  • Probablemente utilicen un protocolo personalizado basado en TCP y / o UDP (consulte la comunicación de socket)
  • La mayoría de los juegos están segmentados en "mundos", lo que limita la cantidad de jugadores que están en el mismo universo virtual a la cantidad de eventos de juego que un servidor (probablemente con muchas CPU y mucha memoria) puede procesar razonablemente. El mecanismo exacto de procesamiento de eventos depende de los requisitos del diseñador del juego, pero generalmente espero que los eventos entrantes entren en una cola de prioridad (priorizados por el tiempo recibido y / o el tiempo enviado y probablemente otros criterios en la línea de qué tan malo es) si ignoramos este evento? ").

Este es un tema muy amplio en general. Te sugiero que revises en Amazon.com los libros que cubren este tema.

Debido a que, en general, los MMO requieren los recursos de una empresa para desarrollarse y desplegarse, en cuyo punto son IP valiosas de la empresa, no hay mucha información disponible públicamente sobre implementaciones.

Una cosa que es bastante segura es que, dado que los MMO en general usan un cliente personalizado y un renderizador 3D, no usan HTTP porque no son navegadores web. Los juegos en línea tendrán sus propios protocolos integrados sobre TCP / IP o UDP.

Las simulaciones del juego se construirán utilizando las mismas técnicas que cualquier juego 3D en red, por lo que puede buscar recursos para ese dominio problemático para obtener más información.

Para el gran padre, World of Warcraft, podemos adivinar que su base de datos es Oracle porque los listados de trabajo de Blizzard con frecuencia citan la experiencia de Oracle como un requisito / plus. Usan Lua para el script de la interfaz de usuario. C ++ y OpenGL (para Mac) y Direct3D (para PC) pueden asumirse como los lenguajes de implementación para los clientes de juegos porque así es como se hacen los juegos.

Una compañía que es genial para discutir su implementación es CCP, creadores de Eve en línea. Han publicado una serie de presentaciones y artículos sobre la infraestructura de Eve, y es un caso particularmente interesante porque usan Stackless Python para muchas de las implementaciones de Eve.

http://www.disinterest.org/resource/PyCon2006-StacklessInEve.wmv http://us.pycon.org/2009/conference/schedule/event / 91 /

También hubo un artículo reciente de Game Developer Magazine sobre la arquitectura de Eve:

https : //store.cmpgame.com/product/3359/Game-Developer-June%7B47%7DJuly-2009-Issue---Digital-Edition

El podcast de radio de Ingeniería de Software tenía un episodio con Jim Purbrick sobre Second Life que trata sobre servidores, mundos, escalado y otros elementos internos de MMORPG.

Tradicionalmente, los MMO se han basado en aplicaciones de servidor C ++ que se ejecutan en Linux que se comunican con una base de datos para almacenamiento de back-end y aplicaciones cliente gordas que usan OpenGL o DirectX.

En muchos casos, el cliente y el servidor incorporan un motor de secuencias de comandos que permite que los comportamientos se definan en un lenguaje de nivel superior. EVE es notable porque se implementa principalmente en Python y se ejecuta sobre Stackless en lugar de ser principalmente C ++ con algunos scripts de alto nivel.

Generalmente, el servidor se encuentra en un ciclo de lectura de solicitudes de clientes conectados, procesándolas para hacer cumplir la mecánica del juego y luego enviando actualizaciones a los clientes. UDP puede usarse para minimizar la latencia y la retransmisión de datos obsoletos, pero como los juegos de rol generalmente no emplean el juego de contracción TCP / IP es normalmente una mejor opción. Comet o BOSH se pueden usar para permitir comunicaciones bidireccionales a través de HTTP para MMO basados ??en web y los sockets web pronto serán una buena opción allí.

Si estuviera creando un nuevo MMO hoy, probablemente usaría XMPP, BOSH y construiría el cliente en JavaScript, ya que eso permitiría que funcione sin una descarga de cliente pesado e interoperar con IM y sistemas de voz basados ??en XMPP (como gchat) . Una vez que WebGL sea ampliamente compatible, esto incluso permitiría mundos virtuales 3D basados ??en navegador.

Debido a que los entornos son demasiado grandes para simular en un solo proceso, normalmente se dividen geográficamente entre procesos, cada uno de los cuales simula una pequeña área del mundo. A menudo hay una población óptima para un mundo, por lo que se ejecutan múltiples copias (fragmentos) que utilizan diferentes conjuntos de personas.

Hay una buena presentación sobre la arquitectura de Second Life por Ian Wilkes, quien fue el Director de Operaciones aquí: http://www.infoq.com/presentations/Second-Life-Ian-Wilkes

La mayoría de mis charlas sobre la tecnología Second Life están vinculadas desde mi blog en: http://jimpurbrick.com

Eche un vistazo a Erlang . Es un lenguaje de programación concurrente y un sistema de tiempo de ejecución, y fue diseñado para admitir aplicaciones distribuidas, tolerantes a fallas, en tiempo real suave y sin interrupciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top