I recently started looking at what would be the requirements for developing a fast-based real time (e.g. an FPS) multiplayer game that would work well on internet, as internet multiplayer poses some interesting challenges such as variable lag, data loss, jitter, etc.

I started looking at what the "big players" are doing this domain. For example, the Source Engine has some extensive feature set and solid documentation on supporting this use case, specifically things like: Cheat protection (making the server authoritative source of truth) Entity interpolation Prediction Interpolation Lag compensation etc

I was not able to find much on these topics in the Godot documentation (I was looking at High Level multiplayer docs).

I'd be happy to contribute to Godot project in this sense, but before digging into the code and trying to understand it myself, I was hoping to get some answers here first:

1) First of all, how does the Client-Server architecture of Godo multiplayer API look like? Specifically, when I for example make an rpc() broadcast-like call from one of the clients, are these packets sent to other clients in peer-to-peer fashion or do they go thru server in centralized fashion? I think this is important for scenarios such as Cheat protection, where we should assume that every client is potentially hacked and can't be trusted

2) Is there any existing support for some of the features mentioned above? Is there some documentation on this yet? (if not, again, I'll be happy to contribute)

3) Are there any existing games that showcase Godot network code to achieve realtime multiplayer support?

Thanks in advance!

2) Is there any existing support for some of the features mentioned above? Is there some documentation on this yet? (if not, again, I'll be happy to contribute)

There's an issue that tracks networking features to be added. However, interpolation, prediction and lag compensation tend to be highly game-specific, so it would be difficult to provide generic helpers for those. (That said, Godot already offers a Tween node which could be used for interpolation.)

3) Are there any existing games that showcase Godot network code to achieve realtime multiplayer support?

The multiplayer bomber demo shows how to use the high-level multiplayer API (in a client-server fashion), but physics are computed on each client and the result is sent to the server (in other words, the server doesn't have authority on physics).

It's definitely possible to have physics run on the server instead, but implementing client-side prediction is nontrivial.

Thanks for the replies!

Could you comment on #1 as well - Are there some technical specs I could read about how the client-server networking was implemented (other than jumping into code and learning from there)?

I'm not aware of a formal specification being available, but you could hop onto IRC (#godotengine-devel @ chat.freenode.net) and ask engine developers there.

4 years later