mirror of
https://github.com/godotengine/godot-docs.git
synced 2026-01-04 14:11:02 +03:00
Add a Hosting considerations section to High-level multiplayer
This covers topics such as internal vs public IP addresses and port forwarding.
This commit is contained in:
@@ -8,7 +8,7 @@ High-level vs low-level API
|
||||
|
||||
The following explains the differences of high- and low-level networking in Godot as well as some fundamentals. If you want to jump in head-first and add networking to your first nodes, skip to `Initializing the network`_ below. But make sure to read the rest later on!
|
||||
|
||||
Godot always supported standard low-level networking via UDP, TCP and some higher level protocols such as SSL and HTTP.
|
||||
Godot always supported standard low-level networking via :abbr:`UDP (User Datagram Protocol)`, :abbr:`TCP (Transmission Control Protocol)` and some higher-level protocols such as :abbr:`HTTP (Hypertext Transfer Protocol)` and :abbr:`SSL (Secure Sockets Layer)`.
|
||||
These protocols are flexible and can be used for almost anything. However, using them to synchronize game state manually can be a large amount of work. Sometimes that work can't be avoided or is worth it, for example when working with a custom server implementation on the backend. But in most cases, it's worthwhile to consider Godot's high-level networking API, which sacrifices some of the fine-grained control of low-level networking for greater ease of use.
|
||||
|
||||
This is due to the inherent limitations of the low-level protocols:
|
||||
@@ -51,7 +51,7 @@ In summary, you can use the low-level networking API for maximum control and imp
|
||||
You can of course experiment, but when you release a networked application,
|
||||
always take care of any possible security concerns.
|
||||
|
||||
Mid level abstraction
|
||||
Mid-level abstraction
|
||||
---------------------
|
||||
|
||||
Before going into how we would like to synchronize a game across the network, it can be helpful to understand how the base network API for synchronization works.
|
||||
@@ -68,7 +68,35 @@ one based on WebRTC (:ref:`WebRTCMultiplayer <class_WebRTCMultiplayer>`), and on
|
||||
mobile APIs (for ad hoc WiFi, Bluetooth) or custom device/console-specific networking APIs.
|
||||
|
||||
For most common cases, using this object directly is discouraged, as Godot provides even higher level networking facilities.
|
||||
Yet it is made available in case a game has specific needs for a lower level API.
|
||||
This object is still made available in case a game has specific needs for a lower-level API.
|
||||
|
||||
Hosting considerations
|
||||
----------------------
|
||||
|
||||
When hosting a server, clients on your :abbr:`LAN (Local Area Network)` can
|
||||
connect using the internal IP address which is usually of the form
|
||||
``192.168.*.*``. This internal IP address is **not** reachable by
|
||||
non-LAN/Internet clients.
|
||||
|
||||
On Windows, you can find your internal IP address by opening a command prompt
|
||||
and entering ``ipconfig``. On macOS, open a Terminal and enter ``ifconfig``. On
|
||||
Linux, open a terminal and enter ``ip addr``.
|
||||
|
||||
If you're hosting a server on your own machine and want non-LAN clients to
|
||||
connect to it, you'll probably have to *forward* the server port on your router.
|
||||
This is required to make your server reachable from the Internet since most
|
||||
residential connections use a `NAT
|
||||
<https://en.wikipedia.org/wiki/Network_address_translation>`__. Godot's
|
||||
high-level multiplayer API only uses UDP, so you must forward the port in UDP,
|
||||
not just TCP.
|
||||
|
||||
After forwarding an UDP port and making sure your server uses that port, you can
|
||||
use `this website <https://icanhazip.com/>`__ to find your public IP address.
|
||||
Then give this public IP address to any Internet clients that wish to connect to
|
||||
your server.
|
||||
|
||||
Godot's high-level multiplayer API uses a modified version of ENet which allows
|
||||
for full IPv6 support.
|
||||
|
||||
Initializing the network
|
||||
------------------------
|
||||
@@ -407,7 +435,7 @@ Example player code:
|
||||
return # Already stunned
|
||||
|
||||
rpc("stun")
|
||||
|
||||
|
||||
# Stun this player instance for myself as well; could instead have used
|
||||
# the remotesync keyword above (in place of puppet) to achieve this.
|
||||
stun()
|
||||
|
||||
Reference in New Issue
Block a user