

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Adición de FlexMatch a un cliente de juego
<a name="match-client"></a>

En este tema se describe cómo añadir la funcionalidad de emparejamiento de FlexMatch a los componentes de juego del lado del cliente.

Es recomendable que el cliente de juegos realice solicitudes de emparejamiento a través de un servicio de juego de backend. Al utilizar un origen de confianza para la comunicación con el servicio Amazon GameLift Servers, puede protegerse más fácilmente contra los intentos de ataques informáticos y los datos falsos de los jugadores. Si su juego dispone de un servicio de directorio de sesiones, esta es una buena opción para controlar las solicitudes de emparejamiento. Usar un servicio de juego de backend para todas las llamadas al servicio Amazon GameLift Servers es una práctica recomendada para aquellos casos en los que se utiliza FlexMatch con el alojamiento de Amazon GameLift Servers y como servicio independiente.

Las actualizaciones del lado del cliente son necesarias tanto si se utiliza FlexMatch con un alojamiento administrado de Amazon GameLift Servers como un servicio independiente con otra solución de alojamiento. Con la API de servicio paraAmazon GameLift Servers, que forma parte del AWS SDK, añada la siguiente funcionalidad:
+ Solicitar el emparejamiento para uno o varios jugadores (obligatorio). En función del conjunto de reglas de emparejamiento, esta solicitud puede requerir ciertos datos específicos del jugador, como los atributos de jugador y la latencia.
+ Monitorizar el estado de las solicitudes de emparejamiento (obligatorio). Por lo general, esta tarea requiere configurar la notificación de eventos.
+ Solicitar la aceptación de un jugador para una propuesta de emparejamiento (opcional). Esta característica requiere una interacción adicional con el jugador para mostrar los detalles del emparejamiento y permitir que este lo acepte o lo rechace.
+ Obtener la información de conexión de la sesión y unirse al juego (obligatorio). Cuando se haya iniciado una sesión de juego para el nuevo emparejamiento, recupere la información de conexión de la sesión de juego y úsela para conectarse a la sesión de juego.

## Requisitos previos: tareas del lado del cliente
<a name="match-client-setup"></a>

Antes de poder añadir al juego la funcionalidad del lado del cliente, debe realizar estas tareas:
+ **Agrega el AWS SDK a tu servicio de backend.** El servicio de backend utiliza la funcionalidad de la API de Amazon GameLift Servers, que forma parte del SDK de AWS . Consulte [Amazon GameLift Servers SDKs los servicios de cliente](https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-supported.html#gamelift-supported-clients) para obtener más información sobre el AWS SDK y descargar la versión más reciente. Para ver las descripciones y la funcionalidad de la API, consulte [Amazon GameLift ServersFlexMatchReferencia de API (AWS SDK)](reference-awssdk-flex.md).
+ **Configure un sistema de tickets de emparejamiento.** Todas las solicitudes de emparejamiento deben tener un ID de ticket único. Cree un mecanismo para generar tickets únicos IDs y asígnelos para que coincidan con las solicitudes. Un ID de ticket puede usar cualquier formato de cadena, hasta un máximo de 128 caracteres. 
+ **Recopile información sobre el emparejador.** Obtenga la siguiente información de la configuración y el conjunto de reglas de emparejamiento. 
  + Nombre del recurso de configuración de emparejamientos.
  + La lista de atributos de jugador, que se definen en el conjunto de reglas.
+ **Recupere los datos de los jugadores.** Configure una forma de obtener datos relevantes para que cada jugador los incluya en sus solicitudes de emparejamiento. Necesita el ID del jugador y los valores de los atributos de jugador. Si su conjunto de reglas tiene reglas de latencia o desea usar los datos de latencia al ubicar las sesiones de juego, recopile los datos de latencia de cada ubicación geográfica en la que es probable que se incluya al jugador en un espacio vacío del juego. Para obtener mediciones de latencia precisas, utilice señalizadores de pings de UDP de Amazon GameLift Servers. Estos puntos de conexión le permiten medir la latencia real de la red UDP entre los dispositivos de los jugadores y cada una de las posibles ubicaciones de alojamiento, de forma que pueda tomar decisiones de ubicación más precisas que utilizando pings de ICMP. Para obtener más información sobre el uso de señalizadores de pings de UDP para medir la latencia, consulte [Señalizadores de pings de UDP](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/reference-udp-ping-beacons.html).

# Solicitud del emparejamiento de jugadores
<a name="match-client-start"></a>

Añada código a su servicio de backend para crear y administrar las solicitudes de emparejamiento a un emparejador de FlexMatch. El proceso de solicitud de emparejamiento de FlexMatch es idéntico para los juegos que utilizan FlexMatch con alojamiento administrado de Amazon GameLift Servers y para los juegos que utilizan FlexMatch como solución independiente.

## Creación de una solicitud de emparejamiento:
<a name="match-client-start-request"></a>

Llama a la Amazon GameLift Servers API [StartMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartMatchmaking.html). Cada solicitud debe incluir la siguiente información.

**Creador de emparejamientos**  
El nombre de la configuración de emparejamiento que desea utilizar para la solicitud. FlexMatch coloca cada solicitud en el grupo del emparejador especificado y la solicitud se procesa en función de la configuración del emparejador. Esto incluye la aplicación de un plazo, ya sea para solicitar la aceptación del jugador de los emparejamientos, qué cola utilizar cuando se coloque una sesión de juego resultante, etc. Para obtener más información sobre los creadores de emparejamientos y las reglas, consulte [Diseño de un emparejador de FlexMatch](match-configuration.md). 

**ID del ticket**  
Un ID de ticket único asignado a la solicitud. Todo lo relacionado con la solicitud, incluidos los eventos y las notificaciones, hará referencia al ID de ticket. 

**Datos del jugador**  
Lista de jugadores para los que se desea crear un emparejamiento. Si alguno de los jugadores de la solicitud no cumple los requisitos de emparejamiento, según las reglas de emparejamiento y los mínimos de latencia, la solicitud de emparejamiento nunca dará lugar a un emparejamiento correcto. Puede incluir hasta diez jugadores en una solicitud de emparejamiento. Cuando hay varios jugadores en una solicitud, FlexMatch intenta crear un único emparejamiento y asignar todos los jugadores al mismo equipo (seleccionado de forma aleatoria). Si una solicitud contiene demasiados jugadores, por lo que no caben en uno de los equipos de emparejamiento, la solicitud no podrá emparejarse. Por ejemplo, si ha configurado el emparejador de tal forma que cree emparejamientos 2v2 (dos equipos de dos jugadores), no puede enviar una solicitud de emparejamiento que contenga más de dos jugadores.  
Un jugador (identificado por su ID de jugador) solo puede incluirse en una solicitud de emparejamiento activa en cada momento. Si se crea una solicitud nueva para un jugador, cualquier ticket de emparejamiento activo con el mismo ID de jugador se cancela automáticamente.
Para cada jugador que aparezca, incluya los siguientes datos:  
+ *ID de jugador*: cada jugador debe tener un ID de jugador único generado por usted. Consulte [Generar reproductor IDs](https://docs.aws.amazon.com/gamelift/latest/developerguide/player-sessions-player-identifiers.html). 
**importante**  
Cuando se crea una nueva solicitud de emparejamiento que contiene un ID de jugador que ya está incluido en una solicitud de emparejamiento existente, esta última se cancela automáticamente. Sin embargo, no se envía ningún evento `MatchmakingCancelled` para la solicitud cancelada. Para controlar el estado de las solicitudes de emparejamiento existentes, utiliza esta opción [DescribeMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeMatchmaking.html)para sondear el estado de las solicitudes a intervalos poco frecuentes (30 a 60 segundos). La solicitud cancelada mostrará el estado `CANCELLED` con el motivo `Cancelled due to duplicate player`.
+ *Atributos de jugador*: si el emparejador en uso llama a atributos de jugador, la solicitud debe proporcionar esos atributos para cada jugador. Los atributos necesarios de los jugadores se definen en el conjunto de reglas del emparejador, que también especifica el tipo de datos para el atributo. Un atributo de jugador es opcional solo cuando el conjunto de reglas especifica un valor predeterminado para el atributo. Si la solicitud de emparejamiento no proporciona atributos de jugador necesarios para todos los jugadores, la solicitud de emparejamiento no podrá ser nunca correcta. Para obtener más información sobre los conjuntos de reglas del creador de emparejamiento y los atributos de jugador, consulte [Creación de un conjunto de reglas de FlexMatch](match-rulesets.md) y [Ejemplos de conjuntos de reglas de FlexMatch](match-examples.md).
+ *Latencias del jugador*: si el emparejador en uso tiene una regla de latencias del jugador, la solicitud debe informar sobre la latencia de cada jugador. Los datos de latencias del jugador son una lista de uno o varios valores por jugador. Representa la latencia que el jugador experimenta para las regiones en la cola del emparejador. Si no hay valores de latencia para un jugador incluidos en la solicitud, el jugador no podrá emparejarse y se producirá un error en la solicitud. Para obtener mediciones de latencia precisas, utilice señalizadores de pings de UDP de Amazon GameLift Servers. Estos puntos de conexión le permiten medir la latencia real de la red UDP entre los dispositivos de los jugadores y cada una de las posibles ubicaciones de alojamiento, de forma que pueda tomar decisiones de ubicación más precisas que utilizando pings de ICMP. Para obtener más información sobre el uso de señalizadores de pings de UDP para medir la latencia, consulte [Señalizadores de pings de UDP](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/reference-udp-ping-beacons.html).

## Recuperación de los detalles de la solicitud de emparejamiento
<a name="match-client-start-retrieve"></a>

Después de enviar una solicitud de partido, puedes ver los detalles de la solicitud llamando [DescribeMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeMatchmaking.html)con el número de entrada de la solicitud. Esta llamada devuelve la información de solicitud, incluido el estado actual. Una vez que se ha completado correctamente la solicitud, el ticket también contiene la información que necesita un cliente de juego para conectarse al emparejamiento. 

## Cancelación de una solicitud de emparejamiento
<a name="match-client-start-cancel"></a>

Puedes cancelar una solicitud de emparejamiento en cualquier momento llamando [StopMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopMatchmaking.html)con el identificador de entrada de la solicitud.

# Seguimiento de eventos de emparejamiento
<a name="match-client-track"></a>

Configure notificaciones para realizar un seguimiento de eventos que Amazon GameLift Servers emite para procesos de emparejamiento. Puedes configurar las notificaciones directamente, mediante la creación de un tema de SNS o a través de Amazon EventBridge. Para obtener más información sobre la configuración de notificaciones, consulte [Configuración de notificaciones de eventos de FlexMatch](match-notification.md). Una vez configuradas las notificaciones, añada un agente de escucha en su servicio de cliente para detectar los eventos y responder según sea necesario. 

También es recomendable hacer copias de seguridad de las notificaciones mediante el sondeo periódico de actualizaciones de estado cuando transcurre un período significativo de tiempo sin notificaciones. Para minimizar el impacto en el rendimiento de emparejamiento, asegúrese de sondear solo después de esperar al menos 30 segundos después de que se haya enviado el ticket de emparejamiento o después de la última notificación recibida.

Para recuperar un ticket de solicitud de emparejamiento, incluido el estado actual, llama [DescribeMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeMatchmaking.html)con el identificador del ticket de la solicitud. Recomendamos sondear no más de una vez cada 10 segundos. Este enfoque se utiliza únicamente en escenarios de desarrollo de bajo volumen.

**nota**  
Debe configurar su juego con notificaciones de eventos antes de tener un uso de emparejamiento de gran volumen, como, por ejemplo, con pruebas de carga de preproducción. Todos los juegos en la versión pública deben usar notificaciones independientemente del volumen. El enfoque de sondeo continuo solo resulta apropiado para juegos en desarrollo con bajo uso de emparejamiento.

# Solicitud de aceptación del jugador
<a name="match-client-accept"></a>

Si utiliza un emparejador que tenga la aceptación de jugador activada, añada el código a su servicio de cliente para administrar el proceso de aceptación del jugador. El proceso de administrar las aceptaciones de los jugadores es idéntico para los juegos que utilizan FlexMatch con el alojamiento administrado por Amazon GameLift Servers y para los juegos que utilizan FlexMatch como solución independiente.

**Solicite la aceptación del jugador para una propuesta de emparejamiento.**

1. **Detecte cuando una propuesta de emparejamiento necesite la aceptación del jugador.** Supervise el ticket de emparejamiento para detectar cuándo el estado cambia a `REQUIRES_ACCEPTANCE`. Un cambio en este estado activa el evento `MatchmakingRequiresAcceptance` de FlexMatch.

1. **Obtener aceptaciones de todos los jugadores.** Cree un mecanismo para presentar los detalles del emparejamiento propuesto a cada jugador en el ticket de emparejamiento. Los jugadores deben poder indicar que aceptan o rechazan el emparejamiento propuesto. Puedes recuperar los detalles del partido llamando [DescribeMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeMatchmaking.html). Los jugadores tienen un tiempo limitado para responder antes de que el emparejador retire el emparejamiento propuesto y continúe.

1. **Informar de las respuestas de los jugadores a FlexMatch.** Reporta las respuestas de los jugadores llamando [AcceptMatch](https://docs.aws.amazon.com/gamelift/latest/apireference/API_AcceptMatch.html)con la opción de aceptar o rechazar. Todos los jugadores en una solicitud de emparejamiento deben aceptar el emparejamiento para que avance.

1. **Administrar tickets con aceptaciones erróneas.** Se produce un error en la solicitud cuando un jugador del emparejamiento propuesto rechaza el emparejamiento o no responde antes de que transcurra el plazo de aceptación. Los tickets de los jugadores que aceptaron el emparejamiento se devuelven automáticamente al grupo de tickets. Los tickets de los jugadores que no aceptaron el emparejamiento pasan al estado de ERROR y dejarán de procesarse. En el caso de los tickets con varios jugadores, si alguno de los jugadores del ticket no acepta el emparejamiento, se pierde todo el ticket.

# Conexión a un emparejamiento
<a name="match-client-connect"></a>

Añada código a su servicio de cliente para administrar los emparejamientos formados correctamente (estado `COMPLETED` o evento `MatchmakingSucceeded`). Esto incluye la notificación de los jugadores del emparejamiento y el envío de información de la conexión a los clientes de juego. 

En el caso de los juegos que utilizan el alojamiento administrado de Amazon GameLift Servers, cuando se tramita correctamente una solicitud de emparejamiento, la información de conexión de la sesión de juego se añade al ticket de emparejamiento. Recupera un boleto de emparejamiento completo llamando [DescribeMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeMatchmaking.html). La información de conexión incluye la dirección IP y el puerto de la sesión de juego, así como un ID de sesión de jugador para cada ID de jugador. Obtenga más información en [GameSessionConnectionInfo](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSessionConnectionInfo.html). Su cliente de juegos puede utilizar esta información para conectarse directamente a la sesión de juego para el emparejamiento. Una solicitud de conexión debe incluir un ID de jugador y un ID de sesión de jugador. Estos datos asocian al jugador conectado a los datos del partido de la sesión de juego, que incluyen las asignaciones de los equipos (consulte [GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html)). 

En el caso de los juegos que utilizan otras soluciones de alojamiento, como Amazon GameLift Servers FleetIQ, debe incorporar un mecanismo que permita a los jugadores conectarse a la sesión de juego adecuada. 

# Ejemplo de solicitudes de emparejamiento
<a name="match-client-sample"></a>

Los siguientes fragmentos de código crean solicitudes de emparejamiento para diferentes emparejamientos. Como se ha indicado anteriormente, una solicitud debe proporcionar los atributos de jugador que necesita el emparejador en uso, tal y como se definió en el conjunto de reglas del emparejador. El atributo proporcionado debe utilizar el mismo tipo de datos, el número (N) o la cadena (S) que se defina en el conjunto de reglas. 

```
# Uses matchmaker for two-team game mode based on player skill level
def start_matchmaking_for_cowboys_vs_aliens(config_name, ticket_id, player_id, skill, team):
    response = gamelift.start_matchmaking(
        ConfigurationName=config_name,
        Players=[{
            "PlayerAttributes": {
                "skill": {"N": skill}
            },
            "PlayerId": player_id,
            "Team": team
        }],
        TicketId=ticket_id)

# Uses matchmaker for monster hunter game mode based on player skill level
def start_matchmaking_for_players_vs_monster(config_name, ticket_id, player_id, skill, is_monster):
    response = gamelift.start_matchmaking(
        ConfigurationName=config_name,
        Players=[{
            "PlayerAttributes": {
                "skill": {"N": skill},
                "desiredSkillOfMonster": {"N": skill},
                "wantsToBeMonster": {"N": int(is_monster)}
            },
            "PlayerId": player_id
        }],
        TicketId=ticket_id)

# Uses matchmaker for brawler game mode with latency
def start_matchmaking_for_three_team_brawler(config_name, ticket_id, player_id, skill, role):
    response = gamelift.start_matchmaking(
        ConfigurationName=config_name,
        Players=[{
            "PlayerAttributes": {
                "skill": {"N": skill},
                "character": {"S": [role]},
            },
            "PlayerId": player_id,
            "LatencyInMs": { "us-west-2": 20}
        }],
        TicketId=ticket_id)

# Uses matchmaker for multiple game modes and maps based on player experience
def start_matchmaking_for_multi_map(config_name, ticket_id, player_id, skill, maps, modes):
    response = gamelift.start_matchmaking(
        ConfigurationName=config_name,
        Players=[{
            "PlayerAttributes": {
                "experience": {"N": skill},
                "gameMode": {"SL": modes},
                "mapPreference": {"SL": maps}
            },
            "PlayerId": player_id
        }],
        TicketId=ticket_id)
```