Learn about Servers (¡ahora en Español!)

Introduction

Hello everyone! In this post, I will be explaining the differences between a server and a server instance, and other programming aspects that have to do with how servers work in Roblox, related to :ReserveServer method.

I will explain through a TeleportService perspective!

Server vs Server Instance

Firstly, in this post I will talk about two terms that, although their names are invented, I use them so you can understand it better:

A server instance is a running server in Roblox, whereas a server would be the “.Parent” of that server instance containing the information about it.

To clear doubts, and as an example, let’s create a private server in our game!

Once created, let’s join it, the private server will create a server instance with that information.

image

As you can see, this is the private server id of the server.

Now, let’s leave, and wait for the server to end. It will end when everybody has left, but it is possible that we have to wait because Roblox has to decide whether it should be closed yet. Once it ends, we join our same private server again but it will create a new server instance:

image

See? Even though they are different server instances, they have the same information.

Types of servers:

  • Private Servers:

    1. Reserved Servers
    2. Owned Private Servers
  • Public Servers (no subtypes)

Both reserved servers and owned private servers work very similarly.

The only difference between both is that reserved servers have access codes that the developer can access, while owned private servers have URLs that cannot be changed or edited by the developers, but by the owner (and maybe more things managed internally by Roblox). You wouldn’t want a developer being able to place people inside your private server.
Reserved servers do not have an owner.

Both types of private servers will have a consistent private server id and access code, in the case of reserved servers.

Supposedly, only one server instance should be running for one server, but there’s an issue that I will be explaining at the end of this post.

JobId, PrivateServerId, AccessCode

  • JobId is the simplest of them all, it is given to each and every server instance, and is unique. This means that it will never be used again. All server instances have job Ids, and unique, even if it was possible to have two server instances belonging to the same server (it is possible, see the end of the post).

  • PrivateServerId will be associated with each server that is private (not server instance, since it persists for every server instance of said server).

  • AccessCode will be associated with private reserved servers.

The information associated with servers will persist, PrivateServerId and AccessCode.

How does :ReserveServer work?

Well, as the docs site states, the server is created once :ReserveServer is called. However, no server instance is made until the AccessCode is used, with TeleportService, for example. This is quite identical to how owned private servers work. If you haven’t understood yet, try joining a reserved server 10 days later.

Let’s take a look at this button:
image

You can imagine :ReserveServer working similarly to how that button would work. It creates an owned private server but doesn’t start a server instance yet until you join it. This is the reason why :ReserveServer cannot return a JobId, JobId is only associated with SERVER INSTANCES. A lot of people fail to understand this and end up asking Roblox to add this, when they should use MessagingService to know the JobId, if it was running in the first place.

When teleporting…

Although changes have rolled to TeleportData, TeleportSettings, and TeleportAsync, that is only server-sided, the client is still used as the method of transporting that data, and there’s no server to listen to that. That’s the reason why TeleportService shouldn’t be used on important things, data transportation.

Issues you need to know

  • Xbox duplicated servers
    As stated by the Roblox staff, this is currently not intended behavior and can mess up stuff (see the post for more). You should have a verification system in place, if needed, to prevent two servers from managing the same data, as an example.

  • Ability to get into any Place within an Experience without the need of teleporting from the Start Place. Although Roblox has recently patched this, you shouldn’t depend on others. You should be scripting to prevent this from happening, even if it cannot happen. This is an important tip: “Prevention beats cure”. A good example would be having two places, where one of them is not the Start Place and is supposed to be playable ONLY if its servers are ReservedServers.

Check out this post!

TRANSLATIONS

10 Likes

ESPAÑOL

Introducción

¡Hola a todos! En esta publicación, explicaré las diferencias entre un servidor y una instancia de servidor, además de otros aspectos de programación que tienen que ver con como los servidores funcionan en Roblox, relacionados al método :ReserveServer.

¡Lo explicaré desde la perspectiva de TeleportService!

Servidor vs Instancia de servidor

Para empezar, en esta publicación hablaré refiriéndome a dos términos que, aunque sus nombres sean inventados, simplemente uso para que puedas entender el tema mejor:

Una instancia de servidor es un servidor activo en Roblox, mientras que el servidor albergaría la información de dicha instancia. Puedes pensar en ello como su .Parent, el cual contiene su información. Cada vez que un servidor se inicia, crea una instancia de servidor y da dicha información a esta.

Para aclarar dudas, y como ejemplo, ¡vamos a crear un servidor privado en nuestro juego!

Una vez creado, nos unimos. Dicho servidor creará una instancia de servidor con la información que le pertenece.

image

Como puedes observar, este es el private server id del servidor.

Ahora, salgamos y esperemos a que el servidor termine. Este termina cuando todo el mundo se ha ido y es posible que haya una espera para que Roblox decida si hay que finalizarlo o todavía no. Una vez haya finalizado dicha instancia estará bloqueada y no te podrás unir, y así nos podremos unir al mismo servidor privado pero con una nueva instancia de servidor.

image

¿Viste? Aunque la anterior instancia de servidor ya finalizó, conserva la misma información.

Tipos de servidores:

  • Servidores privados:

    1. Servidores reservados
    2. Servidores privados con propiedad
  • Servidores publicos (no hay subtipos)

Los servidores reservados y los privados con propiedad actúan de manera similar.

La única diferencia entre ellos es que los servidores reservados tienen códigos de acceso que están a la disposición del desarrollador, y los privados con propiedad tendrían URLs, aunque es posible que internamente Roblox también use más cosas, pero eso no nos trae a cuento, y solo podría acceder o editar dicha URL la persona a la que le pertenece dicho servidor privado. No querrías que un desarrollador tenga la capacidad de meter a gente a tu servidor privado. Los servidores reservados no tienen dueño

Ambos tipos de servidores mantienen su private server id y su código de acceso, en el caso de los reservados.

Supuestamente, solo una instancia de servidor debería existir por cada servidor, pero hay un error que explicaré al final de la publicación.

JobId, PrivateServerId, AccessCode

  • JobId es el más simple, es dado a todas las instancias de servidor y también es único para cada una. Esto significa que nunca se volverá a utilizar el mismo. Todas las instancias de servidor tienen un Jobid distinto, incluso aunque fuese posible tener dos instancias de servidor para un mismo servidor (y lo es, mira el final de la publicación).

  • PrivateServerId se asociará con cada servidor que sea privado (no instancia de servidor, ya que persiste para todas las instancias de dicho servidor).

  • AccessCode se asocia con servidores privados reservados.

La información asociada a servidores persiste. Es decir, PrivateServerId y AccessCode.

¿Cómo funciona :ReserveServer?

Como la documentación explica, el servidor reservado es creado una vez se inicia el proceso (se corre :RunServer). Sin embargo, ninguna instancia de servidor es creada hasta que se usa el AccessCode, con TeleportService, por ejemplo. Idéntico al ejemplo que puse sobre los servidores privados con propiedad. Por si no lo has entendido, prueba a reservar un servidor, y unirte a este 10 días más tarde.

Miremos este botón:
image

Podemos imaginar a :ReserveServer funcionando similar a como ese botón funcionaría. Este crea un servidor privado, con propiedad, pero no empieza ninguna instancia de servidor hasta que lo unes. Como se puede observar, correr :ReserveServer sería similar a darle click a ese botón. Esta es la razón por la que :ReserveServer no puede dar un JobId, ya que solo es otorgado y asociado a instancias de servidor. Mucha gente no cae en esto y pide dicho funcionamiento a Roblox, cuando pueden usar MessagingService para conocer el JobId, si es que se ha logrado iniciar.

Al teletransportarse…

Aunque ha habido cambios en TeleportData, TeleportSetting, además de TeleportAsync, que solo funciona server-side, el cliente sigue siendo usado como método para transportar dicha información, y no hay servidor que escuche tal cosa, y es por eso por lo que no se debería usar TeleportService para enviar información.

Errores que debes conocer

  • Servidores duplicados en Xbox
    Como mencionó el empleado de Roblox, esto no es comportamiento intencionado, es preocupante y puede causar errores graves en caso de que uses alguna database o sistema de servidores. Si es necesario, tener un sistema de verificación es importante, para saber si hay más de una instancia de servidor activa que comparte PrivateServerId.

  • Habilidad de meterse a cualquier Place perteneciente a una Experience sin la necesidad de teletransporte desde la Start Place. Esto fue arreglado por Roblox, pero aún así debes tener otro sistema de verificación por si acaso. En general, como consejo, no deberías programar dependiendo de otros, en este caso Roblox. Prevenir es mejor que curar, y por eso, no daña tener sistemas que aseguren que nada pase. Hay juegos que solo usan sus otras Places con servidores reservados, esto podría ser un ejemplo.

¡Mira esta publicación!

2 Likes