Marco de programación de juegos en línea Java paso a paso ioGame 17.1.48

actualización importante

Generación de documentos mejorada, agregando anotaciones de parámetros de acción.

Generación de documentación mejorada, descripción de comentario de valor de retorno.

Solucione el error de análisis de documentos al importar jar local en pom.

 

Estadísticas de tendencias de uso de ioGame

La cantidad de desarrolladores de servidores de juegos que prestan atención a ioGame continúa aumentando, estadísticas desde septiembre de 2022 hasta julio de 2023 ; 

La información estadística aquí es acerca de los desarrolladores que prestan atención al marco de trabajo de ioGame. Se puede ver a partir de los datos estadísticos que ioGame ha atraído la atención de muchos desarrolladores debido a sus ventajas, como su facilidad de uso y sus potentes funciones. Si quiere saber si alguien está usando ioGame, puede ir aquí para leer estadísticas, reseñas de desarrolladores y debates.

https://www.yuque.com/iohao/game/gpxk93#TwVa8

Aquí se muestran los datos estadísticos mensuales, los datos estadísticos provienen de los antecedentes de Yuque, estos datos son reales, objetivos y en vivo .

Debido al costo, no hay ningún comerciante que pueda brindar este tipo de servicio en Mobao Mooduo, por lo que estas estadísticas son más auténticas.

A través de las estadísticas, podemos ver que muchos desarrolladores visitan los documentos en línea de ioGame todos los días, y estas estadísticas no se derivan de Kouhe ni se crean subjetivamente.

Por lo tanto, los desarrolladores que aún dudan si usar ioGame deberían discutir "por qué estos desarrolladores eligen usar ioGame", en lugar de si alguien está usando ioGame.

Haga clic en mí para ver los datos de ioGame en el fondo de Yuque

asistente experto

ioGame se ha cargado en el almacén central. Si no se puede descargar el código fuente del marco de trabajo más reciente, se recomienda que el proxy de almacén maven del desarrollador utilice el proxy nativo o de Tencent Cloud. Actualmente no se recomienda el proxy de Alibaba Cloud. Para conocer la configuración del proxy de Tencent Cloud, consulte aquí .

Consulte la última versión de ioGame en  https://www.yuque.com/iohao/game/ab15oe

ioGame es un marco de servidor de juegos en línea liviano. ioGame no tiene fuertes dependencias en el middleware, es decir, no es necesario instalar ningún otro producto de middleware; en este momento, solo necesita una dependencia para obtener el marco completo y, al mismo tiempo, el tiempo apoya todas las características funcionales.

<dependency>
    <groupId>com.iohao.game</groupId>
    <artifactId>run-one-netty</artifactId>
    <version>${ioGame.version}</version>
</dependency>

Mapa general de vista previa del cuadro

 


Introducción al marco del servidor de juegos en red de ioGame

  • Diseño de arquitectura asincrónica sin bloqueos y basada en eventos; liviano, sin depender de ningún middleware o base de datos de terceros para admitir la agrupación en clústeres, distribuido
  • A través de ioGame, es fácil construir un servidor de juegos paso a paso sin un nodo central en el clúster, automatización del clúster y multiproceso.
  • Paquete pequeño, inicio rápido, menos uso de memoria, más económico, sin necesidad de archivos de configuración y proporciona un control de acceso de enrutamiento elegante
  • Permita que los desarrolladores usen un conjunto de código comercial sin modificaciones y admitan múltiples métodos de conexión: WebSocket, TCP, UDP
  • Permita que los desarrolladores usen un conjunto de códigos comerciales para cambiar y expandir fácilmente diferentes protocolos de comunicación: Protobuf, JSON
  • Rendimiento casi nativo; el marco empresarial puede ejecutar un promedio de 11,52 millones de veces de lógica empresarial por segundo en un solo subproceso
  • El código es un documento de depuración conjunta, verificación JSR380, afirmación + mecanismo de excepción = menos costo de mantenimiento
  • El marco tiene afinidad inteligente con el mismo proceso; durante el desarrollo, el código comercial se puede ubicar y saltar
  • Flexibilidad y diversidad de implementación de la arquitectura: tanto independientes como integradas
  • Puede comunicarse con múltiples servidores de lógica de juego del mismo tipo al mismo tiempo y obtener datos
  • Los servidores lógicos pueden comunicarse entre sí a través de procesos y máquinas.
  • Apoye a los jugadores para vincular dinámicamente el servidor de lógica del juego
  • Compatible con cualquier otro marco
  • Amigable para los desarrolladores de webMVC
  • Sin dependencia fuerte de primavera
  • Costo de aprendizaje cero

 

¿Desea desarrollar un juego en línea paso a paso con alto rendimiento, estabilidad, facilidad de uso, balanceo de carga incorporado, evitando el diseño de explosión de clases, comunicación entre máquinas entre procesos, clúster sin nodo central, automatización de clúster, y multiproceso con estado ¿Qué pasa con el servidor? Si es así, aquí te recomiendo un marco de servidor de juegos en línea ioGame escrito en lenguaje java. A continuación se dará una breve introducción al marco desde varios aspectos.

ioGame es un marco de servidor de juegos en línea Java con las siguientes características:

  • Diseño de arquitectura asíncrona sin bloqueos y basada en eventos
  • Soporta websocket y socket dos protocolos de comunicación
  • Admite diferentes protocolos de comunicación como protobuf y json
  • Clúster sin nodo central, automatización de clúster, diseño distribuido
  • Realmente liviano, puede admitir clústeres y distribuirse sin depender de ningún middleware o base de datos de terceros
  • Proporcione múltiples métodos de comunicación y los servidores lógicos pueden comunicarse entre sí a través de las máquinas
  • Fácil integración con Spring y otros marcos
  • Bajo costo de aprendizaje y buena experiencia de desarrollo.
  • Compatibilidad con métodos de implementación y puesta en marcha de varios servidores, un solo proceso, varios servidores y varios procesos
  • Proporciona funciones de accesibilidad para la generación de documentación del juego.
  • Tamaño de paquete pequeño, inicio rápido y bajo uso de memoria
  • Proporcione un control de acceso de enrutamiento elegante
  • Proporciona una extensión y configuración de rosca flexibles.
  • Afinidad inteligente del mismo proceso

ioGame es un marco liviano especialmente diseñado para servidores de juegos en línea , que puede ayudarlo a construir y ejecutar rápidamente sus propios servidores de juegos. Es adecuado para juegos en línea de todos los tipos y tamaños, ya sea H5, juegos móviles o juegos de PC, ya sea una sala de chat simple o un servidor global complejo , juegos por turnos, juegos de estrategia, juegos casuales inactivos, juegos reales. batallas de tiempo, MMORPG, etc., ioGame puede satisfacer sus necesidades.

ioGame también es excelente en términos de empaque, uso de memoria y velocidad de inicio. Después de que el paquete jar tenga aproximadamente  15 MB , la aplicación generalmente  se inicia en 0.x segundos y la huella de memoria es pequeña. Para obtener más información, consulte  el ejemplo completo de escritura rápida de un servidor desde cero .

En términos de integración ecológica, ioGame se puede integrar fácilmente con spring (5 líneas de código); además de spring, también se puede integrar con cualquier otro marco , como: solon  ... etc., para usar el ecología relevante de otros marcos.

En términos de peso ligero, ioGame  puede admitir la agrupación en clústeres y la distribución sin depender de ningún middleware o base de datos de terceros , y solo necesita un entorno Java para ejecutarse. Esto significa que es fácil de usar y también reduce los costos de implementación y las dificultades de mantenimiento para las empresas en términos de implementación. Al usar ioGame, solo necesita una dependencia para obtener todo el marco sin instalar otros servicios, como: Nginx, Redis, MQ, Mysql, ZooKeeper, la herramienta de compilación del protocolo Protobuf, etc.

En términos de métodos de comunicación, la mayoría de los marcos solo admiten métodos de comunicación push (difusión); mientras que ioGame proporciona 5 tipos de métodos de comunicación, a saber, procesamiento de solicitud única, push y comunicación mutua entre un solo servidor lógico, Comunicarse con múltiples servidores lógicos del mismo tipo, y se comunican en pulsos . A través del uso combinado de varios métodos de comunicación, el trabajo que era difícil de completar en el pasado se puede completar fácilmente, y estos métodos de comunicación admiten la comunicación entre procesos y entre máquinas.

En cuanto a los métodos de conexión, ioGame permite a los desarrolladores utilizar un conjunto de códigos comerciales al mismo tiempo que admite múltiples métodos de conexión sin ninguna modificación. ioGame ya es compatible con los métodos de conexión TCP, WebSocket y UDP, y también admite el cambio flexible entre estos métodos de conexión. El método de conexión es escalable y la operación de expansión también es muy simple, lo que significa que si KCP es compatible más adelante, sin importar si su proyecto actual usa TCP, WebSocket o UDP, puede cambiar a KCP; tenga en cuenta que incluso si cambia a KCP El método de conexión no necesita cambiar el código comercial existente.

En términos de protocolos de comunicación, ioGame permite a los desarrolladores cambiar y expandir fácilmente diferentes protocolos de comunicación , como Protobuf y JSON, con un conjunto de códigos comerciales . Cambie de Protobuf a JSON con solo una línea de código, sin cambiar los métodos comerciales.

En términos de clústeres, Broker de ioGame (puerta de enlace de juegos) adopta un diseño de clúster automatizado sin nodo central, todos los nodos son iguales y autónomos, y no hay un único punto de falla. El clúster se puede administrar automáticamente y escalar de manera elástica.Cuando un nodo se une o sale, puede garantizar automáticamente el equilibrio de carga y la consistencia de los datos sin afectar la disponibilidad del servicio.

En términos de distribución, el servidor lógico de ioGame usa una idea de diseño distribuido, dividiendo el servidor en diferentes niveles, como el servidor externo del juego y el servidor lógico del juego, y cada capa tiene responsabilidades e interfaces claras. Esto mejora la legibilidad y el mantenimiento del código y facilita la expansión horizontal .

En términos de costo de aprendizaje, el costo de aprendizaje de ioGame es muy bajo, se puede decir que es un costo de aprendizaje cero , incluso si no tiene experiencia en programación de juegos, puede comenzar fácilmente. Los desarrolladores solo necesitan dominar los métodos ordinarios de Java o el conocimiento relacionado con webMVC, y luego pueden usar el marco para desarrollar servicios. El marco no requiere que los desarrolladores cambien sus hábitos de codificación, pero se adapta a las necesidades de los desarrolladores.

En términos de afinidad con el mismo proceso , en el mismo proceso, la comunicación entre diferentes instancias de Netty se transmite a través de la memoria, sin transmisión de red, y la velocidad de transmisión de datos es extremadamente rápida. La afinidad del mismo proceso significa que se da prioridad al acceso al servidor de lógica del juego en el mismo proceso. Cuando no hay un servidor de lógica del juego en el mismo proceso que pueda manejar la solicitud, irá a otros procesos o máquinas para encontrar la lógica del juego. servidor que puede manejar la solicitud; En pocas palabras, el marco es muy inteligente en el procesamiento de solicitudes, y le dará prioridad al servidor lógico en el mismo proceso para el consumo.

En términos de experiencia de desarrollo, ioGame presta gran atención a la experiencia de desarrollo del desarrollador; el marco proporciona muchas funciones ricas, como la verificación JSR380, el mecanismo de aserción + excepción, el posicionamiento del código comercial, etc., lo que hace que el código comercial del desarrollador sea más claro y conciso ;

En términos de concurrencia empresarial, el marco resuelve el problema de concurrencia de un solo jugador para los desarrolladores y también brinda una solución al problema de concurrencia de múltiples jugadores en la misma sala o negocio; el marco brinda soporte amigable para la escalabilidad de subprocesos, y no solo puede proporcionar configuraciones rígidas de número de subprocesos; consulte el  subproceso de ioGame relacionado para obtener más detalles .

En términos de experiencia de desarrollo distribuido, normalmente es necesario iniciar varios procesos al desarrollar aplicaciones distribuidas. Esto hará que la depuración y la solución de problemas sean muy difíciles, lo que reducirá la eficiencia del desarrollador y aumentará la carga de trabajo. Este es un problema que muchos marcos no pueden resolver , ¡pero ioGame lo ha hecho! ioGame admite el inicio de un solo proceso de múltiples servidores, lo que facilita a los desarrolladores desarrollar y depurar sistemas paso a paso.

En términos de acoplamiento y depuración conjunta con el front-end, ioGame proporciona una función auxiliar para generar archivos de juego , de modo que el código sea el archivo de acoplamiento . En pocas palabras, cuando se escribe el código comercial, el marco generará automáticamente los documentos más recientes. Si no hay generación de documentos de juego, tendrá que dedicar algo de tiempo a escribir y mantener documentos de acoplamiento, y cuando aumente la cantidad de equipos, los documentos estarán desordenados, desincronizados, no actualizados y se olvidarán de actualizar, etc..

En términos de implementación, ioGame es compatible con la implementación de múltiples servidores, un solo proceso y la implementación de múltiples servidores, múltiples procesos y múltiples máquinas; el método de implementación se puede cambiar a voluntad sin cambiar el código. En la vida diaria, podemos desarrollarnos de acuerdo con un solo pensamiento y, cuando se trata de producción, podemos optar por utilizar la implementación de procesos múltiples.

En términos de prueba de cliente simulado, ioGame proporciona un módulo de prueba de presión y solicitud de cliente simulado . Este módulo se utiliza para simular el cliente y simplificar la carga de trabajo de simulación, solo es necesario escribir la solicitud correspondiente y la devolución de llamada. Además de simular solicitudes simples, por lo general puede realizar una orquestación de solicitudes complejas y respaldar las pruebas de presión de servicios complejos. El proceso de pruebas simuladas es interactivo, pero también admite la automatización de pruebas. A diferencia de la prueba unitaria, este módulo puede simular el entorno de red real y la interacción con el servidor durante la prueba de simulación es sostenible e interactiva .

En términos de flexibilidad arquitectónica , la arquitectura de ioGame consta de tres partes: 1. Servidor externo del juego, 2. Broker (puerta de enlace del juego), 3. Servidor lógico del juego, los tres pueden ser independientes entre sí o integrados entre sí. Por lo tanto, el uso de ioGame puede cumplir con casi cualquier método de implementación y puede adaptarse a diferentes tipos de juegos según sus necesidades, y es simple realizar estas tareas en ioGame.

Los módulos de proyecto escritos por desarrolladores basados ​​en ioGame suelen estar bien organizados, gracias al diseño razonable del marco para el enrutamiento , y también proporcionan un control de acceso elegante para el enrutamiento . Cuando organicemos estos módulos, será de gran ayuda para que otros desarrolladores se hagan cargo del proyecto o realicen un seguimiento del mantenimiento ( disposición de módulos y sugerencias ). Tal vez no puedas sentir el poder de esta pieza en esta etapa, pero a medida que la uses en profundidad, te darás cuenta de los muchos beneficios y ventajas de este diseño.

Los proyectos escritos por desarrolladores basados ​​en ioGame suelen tener una sintaxis concisa, alto rendimiento y baja latencia; el marco requiere al menos JDK17, para que el proyecto pueda disfrutar de las mejoras que trae ZGC y la simplicidad de la sintaxis. A partir de JDK17, ZGC está muy por debajo de su objetivo de tiempo de pausa de menos de un milisegundo , que puede limpiar el exceso de memoria sin afectar la velocidad del juego. De esta manera, no habrá problemas de retraso o bloqueo, lo que equivale a introducir un maestro de ajuste de JVM disfrazado en el proyecto. Para obtener más detalles, consulte  los saltos y límites del rendimiento del GC de recolección de basura de JDK 17 .

En resumen, ioGame es un marco muy adecuado para el desarrollo de juegos en línea. Le permite crear fácilmente servidores de juegos de alto rendimiento, baja latencia y fácilmente escalables, ahorrando tiempo y recursos. Si desea desarrollar rápidamente increíbles juegos en línea, ¡no dude en elegir ioGame ahora! El marco protege una gran cantidad de trabajo complejo y repetitivo, y puede organizar y definir claramente la estructura del módulo funcional y el proceso de desarrollo en el proyecto , lo que reduce los costos de mantenimiento del proyecto posterior.

El marco proporciona un buen soporte en todas las etapas de desarrollo, implementación, pruebas de estrés y pruebas de simulación, etc. Creo que ya tiene una comprensión preliminar de ioGame. Aunque todavía hay muchas funciones y características ricas que no se han presentado, puede obtener una comprensión más profunda a través de la práctica de seguimiento. Gracias por leer y esperamos que use ioGame para crear su propio servidor de juegos.


ioGame consta  de [ Network Communication Framework ] y [ Business Framework ].

  • Marco de comunicación de red : la responsabilidad es la comunicación de red entre servidores.
  • Marco empresarial : la responsabilidad es cómo se maneja y escribe la lógica empresarial.

Marco de comunicación de red 

SOFABolt  es un conjunto de marco de comunicación de red basado en Netty desarrollado por Ant Financial Services Group.

  • Para permitir que los programadores de Java se centren más en la implementación de la lógica empresarial basada en la comunicación de la red , en lugar de enredarse demasiado en la implementación del NIO subyacente de la red y lidiar con problemas de la red que son difíciles de depurar, nació Netty. .
  • Para permitir que los desarrolladores de middleware se centren más en la realización de funciones y características del producto, en lugar de fabricar repetidamente las ruedas del marco de comunicación, surgió SOFABolt.

El nombre de Bolt se toma de la animación de Disney: Lightning Dog. Es un marco de comunicación ligero, fácil de usar, de alto rendimiento y fácil de ampliar basado en las mejores prácticas de Netty .

marco de negocios

Si  el sofá-perno  es permitir que los programadores de Java se centren más en la implementación de la lógica empresarial basada en la comunicación en red . El marco empresarial es para resolver el problema de cómo implementar la lógica empresarial convenientemente . El marco de negocios es una parte del marco del juego. Su responsabilidad es simplificar la implementación de la lógica de negocios de los programadores. El marco de negocios permite a los programadores comenzar rápidamente a escribir negocios de juegos.

El marco empresarial combina  asm  con patrones de diseño como Singleton, Flyweight y Command para cada acción (es decir, el método de procesamiento del negocio) y obtiene la acción a través de una matriz, que es una forma casi nativa.

En un solo subproceso, el marco comercial puede ejecutar 11,52 millones de veces de lógica comercial por segundo en promedio


Diagrama de arquitectura

A través de ioGame, puede crear fácilmente un nodo central sin clústeres, automatización de clústeres y un servidor de juegos en línea paso a paso.

Diseño de arquitectura asíncrona y basada en eventos sin bloqueo, clúster sin nodo central, equilibrio de carga incorporado, soporte distribuido, aumento o disminución dinámica de máquinas, diseño para evitar la explosión de clases;

Cada servidor externo de juegos, cada servidor lógico de juegos y cada intermediario (puerta de enlace de juegos) en la figura se puede implementar en un proceso separado, y los servidores lógicos se pueden comunicar entre procesos (el servidor externo de juegos también es un tipo de servidor lógico).

Clúster de puerta de enlace de juegos

El intermediario (puerta de enlace del juego) admite la implementación del clúster . El uso del clúster es simple. El clúster no tiene un nodo central, automatización del clúster y su propio balanceo de carga . ioGame en sí incluye el registro del servicio, y no necesita conectarse a un centro de registro de servicios externo, como Eureka, ZooKeeper, etc. (ahorrando costos de servidor disfrazados).

A través de la intervención del intermediario (puerta de enlace del juego), el complicado diseño anterior de equilibrio de carga, como el registro del servicio, la verificación de estado (disponible en versiones posteriores), el mantenimiento de la conexión al servidor, etc., ya no es necesario en ioGame, y la estructura es muy simple. De hecho, el rendimiento de un único intermediario (puerta de enlace de juegos) ya es suficiente, porque la puerta de enlace de juegos solo realiza el reenvío.

servidor lógico

El servidor lógico generalmente se refiere al servidor externo del juego y al servidor lógico del juego. Puede haber muchos servidores lógicos, y el límite superior teórico de la cantidad de extensiones de servidor lógico es el límite superior de conexión de netty.

 

Servidor extranjero del juego

El servidor externo mantiene una larga conexión con el usuario (jugador). Primero hagamos una hipótesis, si uno de nuestros hardware nos permite establecer un límite de conexión de usuarios de 5.000 personas, cuando el número de usuarios llegue a 7.000, podemos añadir un servidor externo adicional para desvío y descompresión. Debido a la simplicidad de la expansión del servidor externo del juego, significa que la cantidad de jugadores en línea simultáneos puede llegar fácilmente a millones, decenas de millones o incluso más.

Incluso si iniciamos varios servidores externos del juego, los desarrolladores no necesitan preocuparse por el servidor externo del juego al que están conectados estos jugadores. Estos jugadores siempre pueden recibir mensajes de difusión (push), porque el marco ya ha hecho estas cosas; desde el punto de vista del jugador, solo tenemos "un" servidor. Del mismo modo, desde el punto de vista del desarrollador, solo tenemos "un" servidor externo del juego;

En términos de combinación estructural (diversidad de implementación)

En términos de implementación, es compatible con la implementación de múltiples servidores y un solo proceso (similar a una sola aplicación, y la depuración es más conveniente en el desarrollo paso a paso), y también admite la implementación de múltiples servidores, múltiples procesos y múltiples despliegue de máquinas.

La arquitectura consta de tres partes: 1. Servidor externo del juego, 2. Broker (gateway del juego), 3. Servidor lógico del juego, los tres pueden ser independientes entre sí o integrados entre sí , tales como:

  • Las tres partes del servidor externo del juego, Broker (puerta de enlace del juego) y el servidor de lógica del juego están en un solo proceso; [ Aplicación única ; la depuración es más conveniente cuando se desarrolla paso a paso ]
  • Las tres partes del servidor de juegos, Broker (puerta de enlace de juegos) y servidor de lógica de juegos están en múltiples procesos; [ distribuido ]
  • Las dos partes del servidor del juego y Broker (puerta de enlace del juego) están en un solo proceso; mientras que el servidor de lógica del juego está en múltiples procesos; [similar a la arquitectura tradicional de los juegos anteriores ]
  • Incluso es posible no necesitar el servidor externo del juego, y solo usar las dos partes del Broker (puerta de enlace del juego) y el servidor lógico del juego para otros servicios del sistema ;

Debido a que ioGame sigue los principios de diseño orientado a objetos (principio de responsabilidad única, principio de apertura y cierre, principio de reemplazo literario, principio de inversión de dependencia, principio de segregación de interfaz, ley de Dimiter), etc., las responsabilidades de la arquitectura están claramente definidas y se pueden combinar flexiblemente;

El servidor externo del juego es una de las tres partes de la arquitectura, y el servidor externo del juego predeterminado se implementa en base a netty. Si es necesario, en el futuro también podemos usar marcos de comunicación como  mina y smart-socket  para proporcionar una implementación adicional del servidor externo del juego; incluso si usamos el servidor externo del juego proporcionado por  mina y smart-socket  , no afectará La lógica existente del juego sirve a la lógica comercial, porque el juego satisface el principio de responsabilidad única para el servidor externo y solo mantiene conexiones a largo plazo del usuario (jugador).

Casi todos los desarrolladores se han encontrado con esta situación; en la etapa inicial del proyecto, generalmente se desarrolla en forma de un solo proyecto, y a medida que la demanda continúa aumentando e iterando, evolucionará a un proyecto inflado; Realización de divisiones es difícil y costoso. incluso incompletable, resultando en una refactorización completa;

ioGame proporciona una variedad de implementaciones en términos de combinación estructural A través de la combinación, estos problemas de división pueden evitarse en la etapa inicial del proyecto. En la fase de desarrollo, podemos utilizar el pensamiento de desarrollo de aplicaciones monolíticas, lo que reduce el costo de desarrollo. A través del método de desarrollo de una sola aplicación, la depuración es más conveniente cuando se desarrollan proyectos paso a paso; esto no solo puede tener en cuenta el desarrollo paso a paso, dividir los módulos del proyecto, sino también reducir el costo de desarrollo del equipo;

Ventajas de la arquitectura

La arquitectura tiene un alto grado de abstracción, lo que permite a los diseñadores centrarse más en el negocio sin tener que considerar cuestiones como la implementación subyacente y los parámetros de comunicación.

La transparencia de ubicación del servidor lógico; al mismo tiempo, debido a la modularización y la abstracción, el acoplamiento entre los servidores de toda la arquitectura es muy bajo, y el servidor lógico se puede usar inmediatamente después del registro, lo que aumenta en gran medida la escalabilidad y la mantenibilidad. y hace que la expansión dinámica sea fácil y eficiente. Dado que el servidor lógico está registrado en el Broker (puerta de enlace del juego), el servidor lógico se puede agregar, eliminar y cambiar dinámicamente; dado que el acoplamiento entre los servidores lógicos es pequeño, el trabajo de depuración y prueba también es controlable;

La estructura más clara es que el servidor externo del juego es responsable de mantener el acceso del cliente (conexión de usuarios y jugadores), el servidor de lógica del juego es responsable de la lógica comercial y el corredor (puerta de enlace del juego) es responsable de la programación entre ellos; porque de la arquitectura dividida Razonable, por lo que es particularmente conveniente usar k8s para implementar libremente estos tres servidores. Cualquier servidor que tenga un nivel alto de agua se puede expandir y el nivel del agua se puede reducir cuando pasa el nivel del agua.


La programación de juegos se puede hacer fácil a través de ioGame, el siguiente es un ejemplo de negocio

Definición de archivo de protocolo

Primero, personalizamos un archivo de protocolo, que se utiliza como descripción de nuestro operador comercial. Este protocolo está escrito en código java puro, utilizando jprotobuf, jprotobuf es un  uso simplificado de google protobuf , con el mismo rendimiento. 

Esto puede entenderse como DTO, POJO, business data carrier, etc., cuyo principal objetivo es la transmisión de datos comerciales;

/** 请求 */
@ProtobufClass
@FieldDefaults(level = AccessLevel.PUBLIC)
public class HelloReq {
    String name;
}

Acción

La programación del servidor de juegos , después de que el servidor recibe los datos comerciales, procesa los datos comerciales. Este código comercial puede admitir TCP, WebSocket, UDP al mismo tiempo.

@ActionController(1)
public class DemoAction {
    @ActionMethod(0)
    public HelloReq here(HelloReq helloReq) {
        HelloReq newHelloReq = new HelloReq();
        newHelloReq.name = helloReq.name + ", I'm here ";
        return newHelloReq;
    }
}

 Un método representa una Acción (una acción comercial) en el marco comercial .

El parámetro del nombre del método se usa para recibir los datos comerciales pasados ​​por el front-end. Cuando el método regresa, los datos pueden ser recibidos por el front-end del juego. Los programadores no necesitan preocuparse por los detalles internos del marco empresarial.

Como se puede ver en el ejemplo anterior, esto no es diferente de las clases ordinarias de Java, y este método de diseño evita la explosión de clases . Si solo es responsable de escribir negocios de juegos , entonces el aprendizaje del marco comercial puede detenerse aquí.

¡ La programación de juegos es así de fácil !

 

P: ¿Puedo comenzar a programar el servidor del juego?

Sí, ya puedes empezar a programar el servidor del juego.

 

Ejemplo de acceso (consola)

Cuando accedemos  al método aquí  (generalmente solicitado por la interfaz del juego), la consola imprimirá

Depuración . _ _ _ _ _ _ _ 
_ _ 
_ _ Tom) 
┣ Respuesta: HelloRe q(nombre=Tam, estoy aquí) 
┣ Tiempo: 0 ms (tiempo total dedicado a los métodos comerciales) 
┗━━━━━ Depuración [DemoAction.java] ━━━ [Subproceso actual: RequestMessage -8-1 ] _ _ _

 

Instrucciones de impresión de la consola

Debug. [(DemoAction.java:4).here]:
    表示执行业务的是 DemoAction 类下的 here 方法,4 表示业务方法所在的代码行数。
    在工具中点击控制台的 DemoAction.java:4 这条信息,就可以跳转到对应的代码中(快速导航到对应的代码),这是一个开发良好体验的开始!
userId :  
    当前发起请求的 用户 id。
参数 :  
    通常是游戏前端传入的值。
响应:
    通常是业务方法返回的值 ,业务框架会把这个返回值推送到游戏前端。
时间:
    执行业务方法总耗时,我们可根据业务方法总耗时的时长来优化业务。
路由信息:[cmd - subCmd]
    路由是唯一的访问地址。

Con la información anterior, los desarrolladores de juegos pueden localizar rápidamente el problema. Si no hay información visual, se desperdiciará mucho tiempo en la comunicación entre la parte delantera y trasera durante el desarrollo. Las preguntas incluyen:

  • Ya sea para pasar parámetros (se dice en la parte delantera del juego)
  • Si responder a la pregunta (el backend del juego dice que regresó)
  • Problema de tiempo de ejecución comercial (la parte delantera del juego dice que no ha recibido una respuesta, pero la parte trasera del juego dice que respondió hace mucho tiempo)

Entre ellos, la navegación de código permite a los desarrolladores saltar rápidamente al código correspondiente de la clase de negocio.En un proyecto de cooperación de varias personas, podemos saber rápidamente qué métodos se han ejecutado en el negocio, para que podamos leerlo o modificarlo rápidamente;

función incorporada

Se integra una variedad de módulos opcionales, que se pueden seleccionar a pedido para facilitar el desarrollo de aplicaciones:

  • Eventos de dominio  ( MQ ligero e independiente más rápido -- disruptor ; a través del módulo de eventos de dominio, puede implementar Guava-EventBus similar, ApplicationEvent de modelo basado en eventos de Spring, desacoplamiento de negocios, evitar la concurrencia y no bloquear el subproceso principal para su sistema. .. etc., varias operaciones de onda) 
  • Retardador de tareas  (la tarea se puede ejecutar, suspender, cancelar, etc. en un momento determinado en el futuro, no es una programación de tareas similar a Quartz)
  • Conmutación multientorno  (soporte de configuración en diferentes entornos operativos)
  • light-jprotobuf  ( para compensar el requisito de jprotobuf de que no se pueden generar varios objetos en un solo archivo fuente .proto y para simplificar los comentarios de jprotobuf en los archivos fuente )
  • Bloqueo paso a paso  (implementación simple basada en Redisson)

Otras funciones integradas:

¿Para la multitud?

  1. He estado involucrado en desarrolladores de sistemas internos web durante mucho tiempo y quiero saber sobre el juego.
  2. nuevo en el desarrollo de juegos
  3. Aquellos que nunca se han involucrado en el desarrollo de juegos, pero están interesados ​​en ello.
  4. Alumnos que estén interesados ​​en la aplicación de patrones de diseño en la práctica y el perno del sofá.
  5. receptivo a cosas nuevas
  6. Los que quieren renunciar a sus códigos ancestrales

Recomendar personas con más de un año de experiencia práctica en programación

ioGame  proporciona una gran cantidad de documentación en línea de alta calidad para ayudar a su equipo, traiga a sus amigos, para que no tenga que enseñarles mano a mano.

Supongo que te gusta

Origin www.oschina.net/news/251266
Recomendado
Clasificación