Skip to main content
Los servicios XBOX pueden llamarse de dos maneras principales: mediante la API de servicios XBOX (XSAPI) o llamando directamente a los puntos de conexión REST. Independientemente de cómo llame su código a los servicios XBOX, es importante contar con patrones de llamada y lógica de reintento adecuados. Para saber cómo escribir una lógica de reintento adecuada, es necesario conocer los dos tipos de puntos de conexión REST: idempotentes y no idempotentes. Estos se describen a continuación.

Puntos de conexión no idempotentes

Los métodos HTTP que tienen efectos secundarios al repetir llamadas se consideran no idempotentes. Esto significa que si un cliente llamara al punto de conexión y se produjera un tiempo de espera de red, no sería seguro reintentar el método, porque el recurso podría haberse actualizado sin que la red pudiera notificar al autor de la llamada que la operación se realizó correctamente. Ante un error, en lugar de reintentar, el cliente debe consultar primero para ver si la llamada se realizó correctamente. Solo si la llamada no se realizó correctamente debería reintentarla. En la API de servicios XBOX, algunas API están marcadas internamente como llamadas a puntos de conexión no idempotentes. Esto significa que si se producen errores al llamar a estos puntos de conexión, las API no reintentarán automáticamente el punto de conexión. La lista completa de API no idempotentes es:

Métodos idempotentes

Los métodos HTTP idempotentes, por otro lado, no dejan efectos secundarios. Esto a su vez significa que es seguro reintentarlos. En la API de servicios XBOX, todos los métodos idempotentes se reintentan automáticamente bajo determinadas condiciones. La lista completa de API idempotentes son todas las API que no se han enumerado anteriormente como no idempotentes.

Procedimientos recomendados de lógica de reintento

Para las llamadas idempotentes, estas condiciones deben reintentarse automáticamente:
  • Todos los errores de red
  • 401: Unauthorized
  • 408: RequestTimeout
  • 429: Too Many Requests
  • 500: InternalError
  • 502: BadGateway
  • 503: ServiceUnavailable
  • 504: GatewayTimeout
En UWP, el error 401: Unauthorized se trata de forma especial. Este valor indica que el token de autenticación de los servicios XBOX ha expirado, por lo que la API de servicios XBOX llama al sistema operativo para actualizar el token y, a continuación, realiza un único reintento. Cuando se realiza un reintento, el procedimiento recomendado es no llamar al servicio hasta que se haya alcanzado el tiempo del encabezado “Retry-After”. XSAPI implementa ahora este procedimiento recomendado. Si se devolvió un código de estado HTTP de error y un encabezado “Retry-After” para cualquier API, las llamadas adicionales a esa misma API antes del tiempo de Retry-After devolverán inmediatamente el error original sin llegar al servicio. Al reintentar una llamada, el procedimiento recomendado es realizar una retirada exponencial con una fluctuación aleatoria para repartir la carga en el servicio. XSAPI comienza con un retraso predeterminado de 2 segundos que se controla mediante XblContextSettingsSetHttpRetryDelay. Esto significa que, de forma predeterminada, cada reintento realiza una retirada exponencial de 2, 4 u 8 o más segundos. Fluctúa el retraso entre el valor de retirada actual y el siguiente en función del tiempo de respuesta para repartir aún más la carga entre el conjunto de dispositivos que intentan el reintento. Los títulos deben controlar cuánto tiempo dedican a reintentar una llamada. Con XSAPI, los desarrolladores tienen control directo de esto mediante la función XblContextSettingsSetHttpTimeoutWindow. De forma predeterminada, está establecido en 20 segundos. Establecerlo en 0 segundos desactivará efectivamente la lógica de reintento.

Ajuste dinámico del tiempo de espera HTTP interno

XSAPI ajusta dinámicamente el tiempo de espera HTTP interno, en función del tiempo que quede en XblContextSettingsGetHttpTimeoutWindow. El tiempo de espera HTTP interno controla cuánto tiempo dedica el sistema operativo a la operación de red HTTP antes de anularla. La llamada no se reintentará a menos que queden al menos 5 segundos en XblContextSettingsGetHttpTimeoutWindow, para dar un tiempo razonable suficiente para que se complete la llamada. Esta regla no se aplica a la primera llamada, por lo que establecer XblContextSettingsSetHttpTimeoutWindow en 0 es aceptable y dará como resultado una única llamada. Esta lógica tiene el efecto de que XblContextSettingsGetHttpTimeoutWindow es más determinista sobre cuándo se producirá el retorno de la llamada API. Si se devolvió un encabezado “Retry-After”, no se realizarán reintentos hasta que se haya alcanzado el tiempo de “Retry-After”. Si el tiempo de “Retry-After” es posterior a XblContextSettingsGetHttpTimeoutWindow, la llamada retornará al final de XblContextSettingsGetHttpTimeoutWindow.

Control de errores

Los desarrolladores de títulos deben usar siempre un control de errores adecuado para cada llamada de servicio, y deben asegurarse de que controlan correctamente las respuestas con error. Hay muchas condiciones del mundo real que pueden hacer que una solicitud a los servicios XBOX devuelva códigos de error, como:
  • La red no está disponible. Por ejemplo, el dispositivo perdió el 4G, perdió la conexión Wi-Fi o la red se cayó.
  • Demasiada carga en los servicios por sobrecarga (503).
  • Se produjo un error en el servicio (500).
  • Se enviaron demasiadas solicitudes al servicio (429).
  • Conflicto de operación de escritura (412). Por ejemplo, otro jugador de una sesión multijugador envió primero un cambio.
  • El usuario ha sido expulsado o no tiene permiso.
  • El usuario ha cerrado sesión.
Un control de errores adecuado es fundamental para garantizar que el juego funcione correctamente en estas condiciones. Para obtener más información sobre los procedimientos recomendados de control de errores, consulte Control de errores. Para ver un vídeo que trata este tema, consulte la charla de los vídeos de Xfest 2015 titulada XSAPI: C++, No Exceptions!

Mejores patrones de llamada

Uso de solicitudes por lotes

Algunos puntos de conexión admiten el procesamiento por lotes o la agregación de un conjunto de solicitudes en una única llamada. Por ejemplo, con el servicio de perfiles de los servicios XBOX puede solicitar el perfil de un único usuario o los perfiles de un conjunto de usuarios. Por lo tanto, si necesita los perfiles de usuario de un conjunto de usuarios, sería muy ineficaz llamar al punto de conexión o a la API de uno en uno para cada perfil de usuario. Cada llamada agrega mucha sobrecarga de autenticación. Por lo tanto, en su lugar, pase a la API de una sola vez todos los usuarios sobre los que quiere información, para que el punto de conexión pueda procesar todos los perfiles de usuario al mismo tiempo y devolver una única respuesta.

Uso del servicio de actividad en tiempo real (RTA) en lugar del sondeo

Un procedimiento recomendado es usar el servicio de actividad en tiempo real (RTA) en lugar del sondeo periódico. El servicio de actividad en tiempo real expone un socket web que envía una notificación a los clientes cuando los recursos de destino cambian en el servicio. El servicio RTA ofrece notificaciones sobre cambios de presencia, cambios de estadísticas, cambios en el documento de sesión multijugador y cambios en las relaciones sociales. Para saber en qué información está interesado el cliente, este debe suscribirse primero al elemento a través del socket web. Esto evita sondear el servicio para detectar cambios, ya que se le indicará exactamente cuándo cambia el elemento. XSAPI expone el servicio RTA como un conjunto de API de suscripción que los clientes pueden usar. Cada una de estas API tiene sus correspondientes API *ChangedHandler, que reciben una función de devolución de llamada que se llamará cuando un elemento cambie.
  • XblPresenceSubscribeToDevicePresenceChange
  • XblPresenceSubscribeToTitlePresenceChange
  • XblUserStatisticsSubscribeToStatisticChange
  • XblSocialSubscribeToSocialRelationshipChange

Uso de los administradores del lado cliente de XSAPI

XSAPI tiene un conjunto de administradores que actúan como caché y máquinas de estado que hacen todo el trabajo pesado en determinados escenarios.

Administrador social

El administrador social hace todo el trabajo pesado relacionado con las listas de amigos y los perfiles. El administrador social mantiene actualizados su lista de amigos, sus perfiles y sus datos de presencia mediante el servicio RTA. El administrador social expone una API sincrónica muy adecuada para los motores de juego. Los juegos pueden llamar a las API del administrador social con frecuencia, porque el administrador social mantiene una caché en memoria con la información más reciente del servicio. Consulte Administrador social.

Administrador multijugador

Para la administración de sesiones multijugador, el administrador multijugador es una solución lista para usar para los juegos multijugador tradicionales. La API del administrador multijugador incluye la administración de la lista de jugadores y de sesiones, controla las invitaciones a partidas, la unión en curso y el emparejamiento, y se conecta a su solución de red existente. Hace todo el trabajo pesado relacionado con la implementación de los flujos multijugador tradicionales. Consulte Administrador multijugador.

Limitación de velocidad (limitación de velocidad específica)

Los servicios XBOX tienen una limitación de velocidad para evitar que un único dispositivo ejerza una carga extrema sobre el servicio. Es importante saber cuándo se ha limitado la velocidad de su título. Para determinar si se ha limitado la velocidad de su título, use cualquiera de estos enfoques:
  • Supervisar el código de estado HTTP 429
  • Usar aserciones de depuración
  • Usar la herramienta XBOX services Trace Analyzer
Estos enfoques se describen a continuación.

Supervisión del código de estado HTTP 429

Puede usar Fiddler y observar si se devuelve un código de estado HTTP 429. La respuesta JSON contendrá detalles sobre cómo se limitó la velocidad del punto de conexión. Por ejemplo:
Si usa XSAPI, las API devolverán un error HTTP_E_STATUS_429_TOO_MANY_REQUESTS y establecerán el mensaje de error para mostrar detalles sobre cómo se limitó la velocidad de la API.

Uso de aserciones de depuración

Al usar XSAPI, si la llamada tiene la velocidad limitada mientras se está en un sandbox de desarrollador y se usa una compilación de depuración del título, se generará una aserción para informar inmediatamente al desarrollador de que se produjo una limitación de velocidad. Esto es para evitar pasar por alto involuntariamente el error de limitación de velocidad 429 debido a código escrito incorrectamente. Si desea deshabilitar estas aserciones para seguir trabajando sin corregir el código problemático, puede usar la API XblDisableAssertsForXboxLiveThrottlingInDevSandboxes:
Tenga en cuenta que esta API no evitará que se limite la velocidad de su título. Su título seguirá teniendo la velocidad limitada. Esto simplemente deshabilita las aserciones en los sandboxes de desarrollo mientras se usa una compilación de depuración.

Uso de la herramienta XBOX services Trace Analyzer

Otra opción para determinar si se ha limitado la velocidad de su título es grabar un seguimiento de las llamadas de servicio de XBOX y, después, analizar ese seguimiento con la herramienta XBOX services Trace Analyzer. Para grabar un seguimiento, puede usar Fiddler para grabar un archivo .SAZ o usar el registro de seguimiento integrado de XSAPI. Para obtener más información sobre cómo activar los seguimientos en XSAPI, consulte el artículo de XBOX XBOX services Trace Analyzer (XblTraceAnalyzer.exe). Una vez que tenga un seguimiento, la herramienta XBOX services Trace Analyzer le avisará cuando detecte llamadas con la velocidad limitada.

¿Están operativos los servicios XBOX?

El servicio XBOX es una colección de microservicios que exponen características de XBOX como el perfil, los amigos y la presencia, las estadísticas, las tablas de clasificación, los logros, el multijugador y el emparejamiento. No hay un único servidor o punto de conexión que defina si los servicios XBOX están operativos. Si un único servidor se cae, el resto de los microservicios del servicio XBOX son en gran medida independientes y deberían estar operativos. Si un único servicio sufre una interrupción temporal, es importante saber si esa llamada de servicio es de misión crítica para su juego. Intente proporcionar una experiencia razonable mientras haya problemas intermitentes de red o de servicio. Por ejemplo, si el servicio de presencia devuelve un error, es probable que esa llamada no sea de misión crítica para su juego. Por lo tanto, simplemente notifique al usuario la última presencia conocida, en lugar de informar de que la red XBOX (también conocida como XBOX Live) está caída. Los servicios XBOX siguen el modelo de coherencia de “coherencia final”. Esto significa que, si no se realizan nuevas actualizaciones, con el tiempo todas las solicitudes de ese recurso notificarán el último valor actualizado. Esto significa que hay un breve período durante el cual la información está obsoleta, mientras los datos se propagan.
Última modificación el 28 de agosto de 2026