XblMultiplayer.
Este tema trata lo siguiente:
- Sesiones de MPSD
- Control de notificaciones de cambios de MPSD y detección de desconexiones
- Identificadores de MPSD para las sesiones
- Sincronización de las actualizaciones de sesión
- Llamar a MPSD
- Multiplayer Session Explorer
Sesiones de MPSD
Una sesión de MPSD se identifica por suXblMultiplayerSessionHandle y representa un escenario en el que uno o varios usuarios juegan a un juego.
MPSD almacena una sesión como un documento JSON seguro en la nube de los servicios de XBOX.
En concreto, una sesión de MPSD tiene las características siguientes.
- La crean y administran los títulos.
- Tiene un URI único. Para obtener más información, consulte URI de Session Directory.
- Permite la conectividad entre los usuarios, denominados miembros de la sesión.
- Almacena datos que hacen posible el juego, como atributos por miembro, configuración del juego, información de arranque (bootstrapping) e información del servidor de juego.
Volver al principio de este tema.
Control de notificaciones de cambios de MPSD y detección de desconexiones
Los clientes se conectan a MPSD mediante el socket web del servicio Actividad en tiempo real (RTA). La conexión se usa para lo siguiente:- Enviar notificaciones breves (avisos o “shoulder taps”) cuando se producen cambios de sesión, en función de las suscripciones a eventos que inician los títulos.
- Detectar desconexiones de usuarios.
- Establecer usuarios como inactivos y luego quitarlos de la sesión, en función de la detección de desconexiones.
Establecer conexiones de usuarios
La biblioteca de la API de Servicios de XBOX (XSAPI) administra la conexión entre el cliente y MPSD.- El título llama a XblMultiplayerSetSubscriptionsEnabled. Este método indica a XSAPI que el cliente pretende usar una conexión RTA con fines multijugador.
- Cuando el título realiza su primera llamada a XblMultiplayerWriteSessionAsync o XblMultiplayerWriteSessionByHandleAsync, con el usuario actual establecido en el estado Activo, se crea una conexión y se enlaza a MPSD.
Para habilitar las notificaciones de sesión y detectar desconexiones, la plantilla de sesión debe establecer
connectionRequiredForActiveMembers en true.Suscribirse a los cambios de sesión
MPSD usa un aviso (“shoulder tap”) como notificación ligera de que algo de interés ha cambiado. Cuando las suscripciones están habilitadas, el título puede suscribirse a los avisos de cambios de sesión con una llamada a XblMultiplayerSessionSetSessionChangeSubscription. Para obtener más información, consulte la sección Suscribirse a las notificaciones de cambios de sesión de MPSD en el tema Tareas multijugador.Controlar los avisos
Cuando un cambio en una sesión coincide con la suscripción del título para esa sesión, MPSD notifica el cambio al título mediante el controlador XblMultiplayerSessionChangedHandler. A continuación, el título debe recuperar la sesión, comparar la versión recuperada de la sesión con la vista anterior almacenada en caché y realizar la acción adecuada.Controlar las notificaciones de cambios de estado de la conexión
El título puede recibir notificaciones sobre los cambios en el estado de la conexión con MPSD. Dos eventos señalan estos cambios.- Controlador XblMultiplayerSessionSubscriptionLostHandler: se desencadena cuando se pierde la conexión del título con MPSD mediante el servicio RTA. Cuando se produce este evento, el título debe cerrar el modo multijugador.
- Controlador XblRealTimeActivityConnectionStateChangeHandler: se desencadena ante un cambio temporal en el estado de la conexión del título con el servicio RTA. El título no está obligado a realizar ninguna acción al recibir este evento, pero el evento puede ser útil con fines de diagnóstico.
Desconectar clientes
Los clientes de su título se desconectan de MPSD cuando el título deshabilita las notificaciones con una llamada a XblMultiplayerSetSubscriptionsEnabled. Poco después de esta llamada, se desencadena el controlador XblMultiplayerSessionSubscriptionLostHandler, lo que indica que un cliente se ha desconectado de MPSD.En versiones anteriores del modo multijugador, los títulos llamaban a
XblRealTimeActivityDeactivate para desconectarse del servicio RTA.
Para el servicio Multijugador 2015, este método no tiene ningún efecto.
La desconexión se produce automáticamente después de llamar a XblMultiplayerSetSubscriptionsEnabled con un valor false y si no hay usuarios de la conexión del socket web, como una suscripción del servicio RTA al servicio Presencia.Detección de desconexiones
MPSD usa su característica de detección de desconexiones para averiguar rápidamente cuándo un usuario se desconecta de forma abrupta. Entre las causas de una desconexión abrupta se incluyen los errores de red del jugador o los bloqueos del título. MPSD cambia el estado del jugador desconectado de Activo a Inactivo y notifica el cambio a los demás miembros de la sesión según corresponda, en función de las suscripciones de los miembros a la sesión.Controlar las reconexiones de RTA
XSAPI intenta volver a conectarse a RTA cuando se producen desconexiones y volver a enviar las suscripciones de RTA. (Para obtener más información, consulte Procedimientos recomendados para el servicio RTA). Volver a enviar la suscripción multijugador de RTA actualiza el identificador de conexión que se usa para asociar a un usuario de una sesión de MPSD con una conexión RTA de cliente. XSAPI notifica al título que el identificador de conexión de MPSD ha cambiado a través de XblMultiplayerAddConnectionIdChangedHandler. Dentro de la devolución de llamada, el título debe escribir el nuevo identificador de conexión en la sesión de MPSD. El nuevo identificador de conexión se puede escribir en la sesión llamando a XblMultiplayerSessionCurrentUserSetStatus y, a continuación, escribiendo en la sesión mediante una llamada a XblMultiplayerWriteSessionAsync.Identificadores de MPSD para las sesiones
Un identificador (handle) de sesión de MPSD es una referencia abstracta e inmutable a una sesión que también puede contener datos con tipo adicionales. Es similar a un identificador de archivo. Todos los identificadores tienen un id. de identificador (GUID) y una referencia de sesión completa que consta de un identificador de configuración de servicio (SCID), una plantilla de sesión y un nombre de sesión. Un identificador no se puede actualizar, pero se puede crear, leer y eliminar.Un identificador puede apuntar a una sesión que no existe.
Crear un identificador con un nombre de sesión inexistente no hace que se cree una sesión nueva.
Tipos de identificadores
Multijugador 2015 admite identificadores de invitación e identificadores de actividad.Identificadores de invitación
Un identificador de invitación representa una invitación a un usuario específico. Los datos específicos del tipo incluyen el usuario de origen, el usuario de destino y una cadena de contexto que describe la invitación; por ejemplo, un modo de juego específico. Un identificador de invitación concede acceso de lectura y escritura a una sesión abierta. Si la sesión está cerrada, el identificador concede acceso de solo lectura a la sesión.MPSD puede crear una invitación, incluso si la sesión está llena o cerrada.
Crear un identificador de invitación
Para crear un identificador de invitación, el título llama a XblMultiplayerSendInvitesAsync. Este método envía una invitación a los usuarios especificados en una notificación sobre la que los destinatarios pueden actuar para aceptar la invitación.Crear un identificador de actividad
Para crear un identificador de actividad, el título llama a XblMultiplayerSetActivityAsync. MPSD establece el nuevo id. de identificador como la actividad enlazada del miembro de la sesión. Si había una actividad enlazada anterior, MPSD elimina el identificador correspondiente. Cuando el miembro activo pasa a estar inactivo o abandona la sesión, MPSD elimina el identificador de la actividad enlazada.Usar identificadores
El título usa identificadores cuando un usuario acepta una invitación (identificador de invitación) y cuando un usuario se une a la actividad actual de un amigo (identificador de actividad). En ambos casos, el título debe realizar las acciones siguientes.- Obtener el id. de identificador a partir de los parámetros de activación del título.
- Crear un objeto de sesión de MPSD local y, a continuación, unirse a él como activo.
- Escribir la sesión, pasando el identificador adecuado.
Sincronización de las actualizaciones de sesión
Una sesión es un recurso compartido que puede crear o actualizar cualquiera de sus miembros. Como resultado, pueden producirse escrituras en conflicto. Esto puede dar lugar a resultados inesperados si, por ejemplo, un título sobrescribe los cambios realizados por otro título. El enfoque de MPSD para resolver estos conflictos consiste en admitir la simultaneidad optimista y un patrón de lectura-modificación-escritura. La sincronización de las actualizaciones de sesión por parte de MPSD usa dos patrones de implementación de alto nivel relacionados.-
Un árbitro actualiza las partes compartidas de la sesión. Si su implementación implica un único árbitro, puede evitar el uso de actualizaciones sincronizadas para la mayoría de las operaciones de escritura. El título puede evitar la sincronización en los casos siguientes.
- Cualquier actualización que el árbitro realice en las partes compartidas de la sesión, a menos que estén relacionadas con la comunicación de la identidad del árbitro
- Cualquier actualización que un título realice en el área de miembro dentro de la sesión
[!NOTE] Aunque los tipos de actualización mencionados anteriormente no necesitan sincronización, sigue siendo importante sincronizar cualquier actualización de la propiedad XblMultiplayerSessionProperties
::HostDeviceToken. Esta propiedad se usa para comunicar la identidad del árbitro, por ejemplo, como parte de la migración del árbitro. - Todos los clientes actualizan las partes compartidas de la sesión. En este caso, todas las actualizaciones de las partes compartidas de la sesión deben sincronizarse. Sin embargo, los títulos aún pueden escribir en sus propias áreas de miembro sin sincronización.
Actualizar la sincronización de sesiones mediante la API multijugador
Los métodos siguientes de la API multijugador implementan la simultaneidad optimista. Cada método de escritura acepta un valor de XblMultiplayerSessionWriteMode. Pasar el valorSynchronizedUpdate usa la simultaneidad optimista para las actualizaciones.
Otros valores de la enumeración ayudan a resolver posibles conflictos en la creación inicial de una sesión.
Cualquier escritura en una parte de la sesión de MPSD en la que potencialmente pueda escribir otro título debe usar una actualización sincronizada.
Sin embargo, no es necesario proteger todas las escrituras.
Si su título intenta escribir el objeto de sesión local en MPSD mediante uno de los métodos de escritura de sesión, es posible que reciba un código de estado HTTP/412. En este caso, debe actualizar la copia local emitiendo una llamada a XblMultiplayerGetSessionAsync para obtener la versión más reciente de la sesión en el servidor antes de intentar la escritura de nuevo.
De lo contrario, el documento de sesión local seguirá conteniendo los datos incorrectos y las llamadas para escribir la sesión seguirán produciendo errores.
Cuando el título llama a uno de los métodos de escritura de sesión, es posible que se devuelva una versión actualizada de la sesión.
Si se devuelve una versión actualizada de la sesión, el título debe reemplazar su copia local en caché por la nueva versión de forma segura para subprocesos.
Actualizar la sincronización de sesiones mediante la API REST multijugador
MPSD admite la simultaneidad optimista en las actualizaciones de sesión a través de la funcionalidad REST mediante el encabezado HTTP “if-match” con la configuración de ETag y el patrón de lectura-modificación-escritura. La ETag que se pasa en la solicitud de escritura debe ser la que MPSD devuelve con la solicitud de lectura anterior. Volver al principio de este tema.Llamar a MPSD
El título puede acceder a MPSD de las maneras siguientes para usar el sistema multijugador y el emparejamiento.- Se recomienda usar la API multijugador, que contiene clases que actúan como contenedores de la funcionalidad RESTful. Para obtener más información, consulte las funciones con el prefijo
XblMultiplayer. Para el emparejamiento de SmartMatch, use la API de emparejamiento, representada por las funciones con el prefijoXblMatchmaking. - Use llamadas HTTP estándar directas a las API REST de multijugador y emparejamiento que se incluyen en la Referencia RESTful de los servicios de XBOX. Los URI aplicables se describen en las secciones URI de Session Directory (para multijugador) y URI de emparejamiento (para el emparejamiento). Los objetos JSON relacionados se describen en la sección Referencia de objetos de notación de objetos JavaScript (JSON).
Usar la API multijugador para llamar a MPSD
Se recomienda llamar a MPSD mediante las API de multijugador y emparejamiento de XSAPI.Los ejemplos están escritos con las API de multijugador y emparejamiento y los demás elementos de XSAPI.
Usar la API REST multijugador para interactuar con MPSD
El título, o su servicio, puede usar llamadas HTTP estándar a la API REST multijugador y a la API REST de emparejamiento. Cuando se usa la funcionalidad REST directamente, el autor de la llamada emite llamadasDELETE, PUT, POST y GET en los URI del directorio de sesiones para la mayoría de las acciones.
En una solicitud PUT, el cuerpo de la solicitud se combina con la sesión existente.
Si no hay una sesión existente, el cuerpo de la solicitud se usa para crear una sesión nueva, junto con la plantilla de sesión almacenada en el Partner Center.
Todos los campos son opcionales y solo se deben especificar los cambios (deltas).
Por lo tanto, {} es una solicitud PUT válida con cero cambios.
Para realizar una solicitud PUT hipotética que devuelva el resultado de la combinación sin afectar a la copia oficial de la sesión en el servidor, puede anexar la cadena de consulta ?nocommit=true a la solicitud PUT.
Las solicitudes y respuestas de los métodos de las API REST de multijugador y emparejamiento son documentos JSON.
Para ver la estructura de una solicitud de sesión multijugador, consulte MultiplayerSessionRequest (JSON).
En MultiplayerSession (JSON) se muestra una estructura de respuesta asociada.
La estructura de respuesta organiza los miembros de la sesión como una lista vinculada y rellena otras propiedades de solo lectura de la sesión y de sus miembros.
Consultar sesiones y plantillas de sesión (REST)
Sus títulos pueden consultar información de sesión en los niveles de configuración de servicio y de plantilla de sesión. En esta sección se describen las consultas que usan la API REST multijugador.Consultar información básica de sesión
Puede configurar consultas de información básica de sesión mediante los URI del directorio de sesiones y de emparejamiento. El resultado de una consulta es una matriz JSON de referencias de sesión, con algunos datos de sesión incluidos en línea. De forma predeterminada, una consulta recupera hasta 100 sesiones no privadas.Cada consulta debe incluir un filtro de palabra clave, un filtro de XUID o ambos.
Consultar plantillas de sesión
Para recuperar la lista de plantillas de sesión del SCID y los detalles de una plantilla de sesión específica, use el métodoGET con uno de los URI siguientes.
- /serviceconfigs//sessiontemplates
- /serviceconfigs//sessiontemplates/
Consultar el estado de la sesión
Para consultar el estado de la sesión, use el métodoGET con uno de los URI siguientes.
- /serviceconfigs//sessions
- /serviceconfigs//sessiontemplates//sessions
Multiplayer Session Explorer
Multiplayer Session Explorer es una herramienta integrada en MPSD para examinar sesiones, plantillas de sesión y cadenas de localización. La herramienta está pensada para usarse solo en sandboxes de desarrollo.Acceder a Multiplayer Session Explorer
Para usar la herramienta, debe haber iniciado sesión. La exploración se limita a las sesiones que tienen al usuario que ha iniciado sesión como miembro.
Recibirá un código de estado HTTP/404 si intenta acceder a la herramienta en el sandbox RETAIL. Para obtener más información sobre este código, consulte Códigos de estado de sesión multijugador.
Abrir la página principal
- Abra la página principal de la herramienta. Muestra el contexto de seguridad (usuario que ha iniciado sesión y sandbox) y una lista de los SCID del sandbox.
- Presione el botón Menu para anclar esta página a Inicio y así no tener que volver a escribir el URI.
Mostrar las sesiones y plantillas disponibles
- Seleccione un SCID en la herramienta para mostrar una lista de las sesiones de ese SCID que incluyen al usuario que ha iniciado sesión como miembro.
- En esta misma página, puede seleccionar el SCID y mostrar las plantillas de sesión y las cadenas de localización de la configuración de servicio del SCID. Estos elementos se ingieren a través del Partner Center.
Mostrar el contenido completo de una sesión
En Multiplayer Session Explorer, seleccione un nombre de sesión para mostrar el contenido completo de la sesión correspondiente. La sesión tal como la muestra MPSD puede diferir de la respuesta a un métodoGET estándar para el URI de la sesión por los motivos siguientes.
- La llamada GET podría estar usando una versión de contrato anterior en el encabezado X-Xbl-Contract-Version. Multiplayer Session Explorer siempre muestra la sesión con la versión de contrato más actualizada.
-
Cuando se solicita una sesión normalmente mediante
GET, se pueden desencadenar transformaciones y efectos secundarios, como tiempos de espera expirados. Multiplayer Session Explorer muestra una instantánea de la sesión tal como está almacenada, sin ejecutar ninguna lógica, transformación ni efecto secundario. -
El campo del objeto JSON
nextTimerno está presente en las sesiones de MPSD porque se calcula al mismo tiempo que los efectos secundarios.
Consulte también
- La sección Información general de las sesiones en el tema Temas avanzados de sesión multijugador
- Códigos de estado de sesión multijugador
- La sección Actualizar una sesión de MPSD en el tema Tareas multijugador
- La sección Unirse a una sesión de MPSD desde una activación del título en el tema Tareas multijugador
- La sección Suscribirse a las notificaciones de cambios de sesión de MPSD en el tema Tareas multijugador
- Información general del emparejamiento
