Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
gdevelop5:all-features:p2p [2020/08/03 15:36]
4ian
gdevelop5:all-features:p2p [2020/12/26 13:56] (current)
Line 1: Line 1:
 # Peer-to-peer # Peer-to-peer
  
-<note important>This is an experimental feature, it is potentially subject to change and may contain bugs. Your feedback is welcome to improve this feature.</note>+<note important>This is an experimental feature, it is subject to change and may contain bugs. Your feedback is welcome to improve this feature.</note>
  
 GDevelop supports peer-to-peer (P2P) connections to enable basic multiplayer games. This works through the concept of *remote events*.  Connect multiple instances of the game using their **ID**, before remotely triggering conditions on the other instances. GDevelop supports peer-to-peer (P2P) connections to enable basic multiplayer games. This works through the concept of *remote events*.  Connect multiple instances of the game using their **ID**, before remotely triggering conditions on the other instances.
  
-<note warning>This extension is not suitable for all types of multiplayer games and is potentially unsafe against cheating. As every instance of the game is connected directly to each other, there is no machine that can be considered trusted more than anothor. As such, it is hard to verify if someone is cheating (unlike dedicated servers). P2P supports a maximum of 250 simultaneous connections, and is therefore also not suited for very large multiplayer-focused games like MMOs.</note>  +<note warning>This extension is not suitable for all types of multiplayer games and is potentially unsafe against cheating. As every instance of the game is connected directly to each other, there is no machine that can be considered trusted more than anothor.  
 + 
 +As such, it is hard to verify if someone is cheating (unlike dedicated servers). P2P supports a maximum of 250 simultaneous connections, and is therefore also not suited for very large multiplayer-focused games like MMOs.</note>  
  
 ## Selecting a broker server ## Selecting a broker server
  
-Before being able to send data, a running game, called a "client", must connect to other clients. For this, it needs a way to self identify and find other clients. To do so we need a broker server. It's a server with a fixed, well-known address that stores all the adresses of the connected clients and give them to the clients, so that they can connect to each other. You have two options here:  +running game, called a **client**, must connect to other clients before being able to send data. For this, it needs a way to self-identify and find other clients. To do so a **broker server** must be configured. It's a server with a fixed, well-known address that stores all the addresses of the connected clients and give them to each client, so that they can connect to each other. 
  
-* Setting up your own server (recommended), which you can run on your computer as a test. +There are two options for setting up a broker server:  
-* Using default, public server.+
  
-####  Set up your own (local) server+  * Setting up a custom server (recommended), which can be run on a local computer as a test. 
 +  * Using a default, public server.
  
-You can set up your own server easily. You will need to [install Node.js](https://nodejs.org/en/download/). The LTS version is recommended.+####  Set up a custom (localserver
  
-Open a command line. To do so on Windows, you can press the Windows and r keys, then type `cmd` in the popup, and enter.+A local server can be set up easily.  [install Node.js](https://nodejs.org/en/download/) will need to be installed. The LTS version is recommended.
  
-In the command line, type the first time only (to install the server)`npm install peer -g` +Open a command line. To do so on Windows
-Then, whenever you want to start the server, just type in a command line `peerjs --port <the port>`.  +  - Press the **Windows** and **R** keys. This will open the **run** window 
-You can use any port that is not already used by your machine.+  Type **cmd** in the popup
 +  - Press the **enter** key.
  
-You can pass other options to the PeerJS server, see [its website](https://github.com/peers/peerjs-server#config--cli-options) for more information.   +After opening a command line, complete the following: 
-You can then use "Use custom broker serveraction to connect to your server. You can enter `localhostas the host to point directly to your own address.+  - If this is the first time completing these steps, to install the server type **npm install peer -g** 
 +  - After the server is installed, and every subsequent time (to start the server), type **peerjs -p <the port>** 
 +      Any port that is not already used by the computer can be used.  
 +Other options can be passed to the PeerJS server, see [its website](https://github.com/peers/peerjs-server#config--cli-options) for more information.   
 +After the above has been completed, the **Use custom broker server** action is used to connect to the server.  
 +  *  **localhost** can be used as the host address to point to the local server.
  
 <note tip>Note that this is a local server, so it will only work on your machine. When releasing your game you will need to deploy one to a Node.js compatible hosting, like Heroku.</note>   <note tip>Note that this is a local server, so it will only work on your machine. When releasing your game you will need to deploy one to a Node.js compatible hosting, like Heroku.</note>  
Line 44: Line 52:
 Once you got connected, you can trigger actions remotely. You can select another specific game instance (using its id) or send an event to all connected instances. Once you got connected, you can trigger actions remotely. You can select another specific game instance (using its id) or send an event to all connected instances.
  
-### About data loss+### Choosing if you want to activate data loss mode
  
 You might be wondering what the "data loss" parameter is for.  You might be wondering what the "data loss" parameter is for. 
-Due to how GDevelop is made, only one occurence of a remote event can be handled when the the event sheet is executed (this happens roughly 60 times per second). To help optimize events execution, we provide the choice to use the dataloss mode. +Due to how GDevelop is made, only one occurence of a remote event can be handled when the event sheet is executed (this happens roughly 60 times per second). To help optimize events execution, we provide the choice to use the dataloss mode. 
  
-* With the *no dataloss* mode, every remote event is queued, and on every frame if there is one in the queue, we take the oldest one and handle it. **This makes sure every data is processed/taken into account.** +* With the *no dataloss* mode, every remote event is queued, and on every frame if there is one in the queue, we take the oldest one and handle it. **This makes sure every data is processed/taken into account.**
 * With the *dataloss mode* activated, it doesn't queue the data but only store the latest occurence of the remote event. **This means only the latest data is processed and outdated data will be discarded.**  * With the *dataloss mode* activated, it doesn't queue the data but only store the latest occurence of the remote event. **This means only the latest data is processed and outdated data will be discarded.** 
 +
  
 Here are two examples:  Here are two examples: 
  
 * if you use a synchronised score counter, you don't want to lose any data, as missing only one point of the counter would *desynchronise* the counters, so the dataloss mode would be deactivated.  * if you use a synchronised score counter, you don't want to lose any data, as missing only one point of the counter would *desynchronise* the counters, so the dataloss mode would be deactivated. 
-* If you want to synchronise positions, only the last position sent is relevant, not older positions. In this canse, you would activate the dataloss mode *to prevent delays/lags*.+* If you want to synchronise positions, only the last position sent is relevant, not older positions. In this case, you would activate the dataloss mode *to prevent delays/lags*.