> 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/scenes-sdk7/networking/third-party-servers.md).

# Servidores de terceros

El enfoque recomendado para las interacciones multijugador en tu scene es usar el [authoritative-server](https://github.com/decentraland/docs/blob/main/creator/sdk7/networking/authoritative-servers-md/README.md). Este documento cubre otras opciones que también son compatibles.

* **REST API + DB**: Es bueno para datos que cambian con poca frecuencia (leaderboards, guestbooks). Los players consultan la API para obtener actualizaciones; el estado persiste entre sesiones. Ver [Network Connections](/creator/content-creator-es/scenes-sdk7/networking/network-connections.md) para ver cómo hacer `fetch` requests desde una scene.
* **WebSocket server**: Permite comunicación bidireccional en tiempo real. Ver [Network Connections](/creator/content-creator-es/scenes-sdk7/networking/network-connections.md) para el uso de WebSocket. Bibliotecas como [Colyseus](https://colyseus.io/) funcionan bien con el Decentraland SDK.

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

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

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

* [Leaderboard](https://github.com/decentraland/sdk7-goerli-plaza/tree/main/leader-board)
* [Guestbook](https://github.com/decentraland/sdk7-goerli-plaza/tree/main/guest-book-api)
* [Validate authenticity](https://github.com/decentraland/sdk7-goerli-plaza/tree/main/validate-player-authenticity)

## Testing Locally

Para hacer preview de una scene que usa un servidor de terceros, debes ejecutar tanto la scene como el servidor en el que se basa. El servidor puede ejecutarse localmente en la misma máquina que el preview, como una forma más sencilla de probarlo. Cuando se ejecuta localmente, el servidor puede usar conexiones inseguras `http` o `ws` , para facilitar la configuración.

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

Abre el 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 Creator Hub, haz clic en el botón Preview una segunda vez, y eso abrirá una segunda ventana de explorer de Decentraland. Debes conectarte en ambas ventanas con direcciones diferentes. Las mismas sesiones permanecerán abiertas mientras la escena se recarga.

Como alternativa, puedes abrir una segunda ventana de 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`

## Separate realms

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

Si tu scene envía datos a un servidor de terceros para sync cambios entre players en tiempo real, entonces es importante que los cambios solo se sincronicen 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 distinto. De lo contrario, los players verán que las cosas cambian de una manera extraña, sin que nadie haga el cambio.

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

## Multiplayer persistance

A diferencia de las escenas locales que se montan de nuevo cada vez que un player entra en ellas, las scenes que usan servidores 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 manera no deseada con las experiencias de futuros players.

### Reset the state

Al cargar la scene, asegúrate de que esté construida en base a la información compartida almacenada en el server, y no en un estado por defecto.

En algunos casos, tiene sentido incluir algún tipo de botón de reset en la scene. Al presionar el botón de reset, la scene se restablecería de manera adecuada.

A veces, esto simplemente implica volver a establecer las variables en el estado de la scene a sus valores por defecto. Pero resetear la scene también podría implicar darse de baja de listeners y detener loops en el lado del server. Si permanecen loops vacíos cada vez que se resetea la scene, estos seguirán acumulándose 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:

```
GET https://docs.decentraland.org/creator/content-creator-es/scenes-sdk7/networking/third-party-servers.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
