> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-es/escenas-sdk7/redes/third-party-servers.md).

# Servers de terceros

El enfoque recomendado para las interacciones multiplayer en tu scene es usar el [Multiplayer Server](/creator/content-creator-es/escenas-sdk7/redes/authoritative-servers.md). Este documento cubre otras opciones que también están soportadas.

* **REST API + DB**: Bueno para datos que cambian con poca frecuencia (tablas de clasificación, libros de visitas). Los players consultan la API para ver actualizaciones; el estado persiste entre sessions. Ver [Conexiones de red](/creator/content-creator-es/escenas-sdk7/redes/network-connections.md) para saber cómo hacer `fetch` peticiones desde una scene.
* **servidor WebSocket**: Permite comunicación bidireccional en tiempo real. Ver [Conexiones de red](/creator/content-creator-es/escenas-sdk7/redes/network-connections.md) para el uso de WebSocket. Librerías como [Colyseus](https://colyseus.io/) funcionan bien con el Decentraland SDK.

{% hint style="warning" %}
**📔 Nota**: Los servers de terceros no se integran con `syncEntity`, `validateBeforeChange`, o `Storage` — tendrás que implementar tu propia lógica de gestión del estado y de sincronización.
{% endhint %}

También es posible optar por un enfoque híbrido en el que los cambios se notifican entre los players a través de [serverless-multiplayer](/creator/content-creator-es/escenas-sdk7/redes/serverless-multiplayer.md), pero el estado final también se almacena mediante una REST API para los visitantes futuros.

Aquí hay algunos ejemplos de scenes que usan un server de terceros:

* [Tabla de clasificación](https://github.com/decentraland/sdk7-goerli-plaza/tree/main/leader-board)
* [Libro de visitas](https://github.com/decentraland/sdk7-goerli-plaza/tree/main/guest-book-api)
* [Validar autenticidad](https://github.com/decentraland/sdk7-goerli-plaza/tree/main/validate-player-authenticity)

## Pruebas locales

Para previsualizar una scene que usa un server de terceros, debes ejecutar tanto la scene como el server del que depende. El server puede ejecutarse localmente en la misma máquina que la preview, como una forma más sencilla de probarlo. Al ejecutarse localmente, el server puede usar conexiones inseguras `http` o `ws` conexiones, para una configuración más sencilla.

Para iniciar el server, ve a la `/server` carpeta y ejecuta `npm run start`.

Abre la preview en dos ventanas separadas; cada ventana se trata como un player distinto. Conecta cada ventana con una dirección diferente. Ambos clients se conectarán a la misma instancia local del server.

Usando el Creator Hub, haz click en el botón Preview una segunda vez, y eso abrirá una segunda ventana del explorer de Decentraland. Debes conectarte en ambas ventanas con direcciones diferentes. Las mismas sesiones permanecerán abiertas mientras la escena se vuelve a cargar.

Como alternativa, puedes abrir una segunda ventana del explorer de Decentraland escribiendo lo siguiente en una URL del navegador:

> `decentraland://realm=http://127.0.0.1:8000&local-scene=true&debug=true&multi-instance=true`

## realms separados

Los players en Decentraland existen en muchos *realms*. Los players en diferentes realms no pueden verse entre sí, interactuar ni chatear entre sí, incluso si están parados sobre los mismos parcels. Dividir a los players de esta manera permite a Decentraland manejar una cantidad ilimitada de players sin encontrarse con limitaciones. También empareja a los players que están en regiones cercanas, para asegurar que los tiempos de ping entre players que interactúan sean aceptables.

Si tu scene envía datos a un server de terceros para sincronizar cambios entre players en tiempo real, entonces es importante que los cambios se sincronicen solo entre players que estén en el mismo realm. Debes tratar todos los cambios que pertenecen a un realm como separados de los de otro realm. De lo contrario, los players verán que las cosas cambian de una forma extraña, sin que nadie haga el cambio.

Mira cómo obtener el realm de cada player en [obtener datos del player](/creator/content-creator-es/escenas-sdk7/interactividad/user-data.md)

## Persistencia de multiplayer

A diferencia de las scenes locales que se montan de nuevo cada vez que un player entra en ellas, las scenes que usan servers de terceros tienen una vida útil que se extiende mucho más allá de cuando el player entra y sale de la scene.

Por lo tanto, debes diseñar la experiencia teniendo en cuenta que el player no siempre encontrará la scene en el mismo estado inicial. Cualquier cambio realizado en la scene permanecerá para que otros players lo encuentren; debes asegurarte de que esto no interfiera de forma no deseada con las experiencias de futuros players.

### Restablecer el estado

Al cargar la scene, asegúrate de que se construya en base a la información compartida almacenada en el server, y no en un estado predeterminado.

En algunos casos, tiene sentido incluir algún tipo de botón de restablecimiento en la scene. Al pulsar el botón de restablecimiento, la scene se restablecería sin problemas.

A veces, esto solo implica volver a establecer las variables del estado de la scene a valores predeterminados. Pero restablecer la scene también podría implicar cancelar la suscripción de listeners y detener loops en el lado del server. Si quedan loops vacíos cada vez que se restablece la scene, estos se irán acumulando y tendrán un efecto negativo en el rendimiento de la scene.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-es/escenas-sdk7/redes/third-party-servers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
