From 93472db01b729e97803ef61ea4d29c5152fe1d2a Mon Sep 17 00:00:00 2001 From: Swann Martinez Date: Thu, 20 Feb 2020 16:04:03 +0100 Subject: [PATCH] feat: hosting guide progress --- docs/tutorials/hosting_guide.rst | 43 +++++++++++++++++++--- docs/tutorials/img/hosting_guide_port.png | Bin 0 -> 14590 bytes 2 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 docs/tutorials/img/hosting_guide_port.png diff --git a/docs/tutorials/hosting_guide.rst b/docs/tutorials/hosting_guide.rst index d9c94f3..d52170a 100644 --- a/docs/tutorials/hosting_guide.rst +++ b/docs/tutorials/hosting_guide.rst @@ -2,12 +2,43 @@ Advanced hosting ================ -WIP +This tutorial aims to guide you to host a collaborative Session on internet. + +.. note:: + This tutorial will change soon with the new dedicated server. + + +The multi-user network architecture is based on a clients-server model. The communication protocol use four ports to communicate with client: + +* Commands: command transmission (such as **snapshots**, **change_rights**, etc.) +* Subscriber: pull data +* Publisher: push data +* TTL (time to leave): used to ping each clients + +To know which ports will be used, you just have to read the port in your preference. + +.. image:: img/hosting_guide_port.png + :align: center + :alt: Port + +In the picture below we have setup our port to **5555** so it will be: + +* Commands: 5555 (**5555** +0) +* Subscriber: 5556 (**5555** +1) +* Publisher: 5557 (**5555** +2) +* TTL: 5558 (**5555** +3) + +Now that we know which port are needed to communicate we need to allow other computer to communicate with our one. +By default your router shall block those ports. In order grant server access to people from internet you have multiple options: + +1. Simple: use a third party software like `HAMACHI `_ (Free until 5 users) or `ZEROTIER `_ to handle network sharing. + +2. Harder: Setup a VPN server and allow distant user to connect to your VPN. + +3. **Not secure** but simple: Setup port forwarding for each ports (for example 5555,5556,5557 and 5558 in our case). You can follow this `guide `_ for example. + +Once you have setup the network, you can run **HOST** in order to start the server. Then other users could join your session in the regular way. + -Port forwarding -=============== - -For now, a session use 4 ports to run. -If 5555 is given in host settings, it will use 5555, 5556 (5555+1), 5557 (5555+2), 5558 (5555+3 diff --git a/docs/tutorials/img/hosting_guide_port.png b/docs/tutorials/img/hosting_guide_port.png new file mode 100644 index 0000000000000000000000000000000000000000..42c575a5c35df848351d2dbff7480a97b7e23af9 GIT binary patch literal 14590 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 literal 0 HcmV?d00001