Should I be wary of using RPC with ENetMultiplayerPeer in an MMORPG?

Godot Version

Godot 4.2.1 and Godot 4.3 Dev 5


Hello. Our team is creating a space 3D MMORPG “RVM Universo”. Previously, this project in the form of an MVP was implemented on Godot 3, then we worked on developing our own cinematic universe, so that our MMORPG had a good plot content.

Currently, we have refactored our project so that it works on Godot 4. We have started implementing a separate Godot client and Godot server.

We are having trouble understanding whether using RPC technology is a hindrance in our new implementation? Currently, we planned to use only the low-level ENetMultiplayerPeer API for interaction between the Godot client and the Godot server. But for some reason, in the examples we found, in addition to ENetMultiplayerPeer, RPC is also used.

From various sources of information, we assumed that if we use RPC, this will not allow the Godot client and Godot server to implement multi-threaded operation. I am NOT talking now about the transfer of data between the Godot client and the Godot server, I am talking about the operation of these applications themselves, so that part of the functionality can be run in separate threads. We are of the opinion that RPC will not allow this. Or are we wrong?

We want to base our network implementation on a protocol that won’t shoot us in the foot. There are topics that we still do not understand well. People who deal with high-load services are working on this project… but we are not associated with game development. For many years I led the development of large transport and logistics systems and other products. We have members who create VR shows, members who are involved in software for aviation, for military systems and a lot of everything, but not game development.

Out of our entire team, we only recently added one programmer who has professional experience in developing computer games. Together we are learning to make good computer games :slight_smile:

The structure of these projects suits me well, because there is a division into a Godot client and a Godot server. But I see that these projects also use RPC.

Please tell me if there is a project that uses the low-level API ENetMultiplayerPeer and in which there is a separation of the code into separate Godot client and Godot server? Such a project would be very useful to me, it would greatly help me to transfer my MMORPG from Godot 3 to Godot 4.

1 Like

For RVM Universo we have a plan to gradually increase the productivity of the project we are creating. This plan includes a list of actions to operationally improve productivity and a list of strategic actions. We develop a plan for each part of our technology stack. At the current stage of development, we are creating an architecture like the one shown in the image.

Currently, the main nodes of our technology stack are:

  • Thick client on Godot. Previously we used Godot 3, now we have refactored and are launching on Godot 4.
  • Thin client on Phaser + Quasar (this is not shown in the diagram).
  • Django backend with PostgreSQL.
  • Godot server, we used to run Godot 3 in headless mode, but now we are creating a new server on Godot 4.

If you’re wondering what this looks like, here are some screenshots from an existing MVP. The work is being carried out under the Omsk open license, but now there is very bad code and so far poor documentation, so I do not provide a link to the repositories here :joy:

Screenshot 1 - station with a view of the force field

Screenshot 2 - space with a view of the ship, station and gas giant

Screenshot 3 - space with a view of another ship and an asteroid

Screenshot 4 - space with a general view of the main location

Screenshot 5 - space destruction of an asteroid

Screenshot 6 - space view of the destroyed ship and a list of objects