Basically RMI helps developers going through a difficult time in programming network by offering simplified function call format (defining message structure, send message, and receive message). Thus RMI not only shortens the development time but also reduces mistakes as making network send/receive routine.
But with the use of RMI, you can simply write a code as shown in below which returns the same result.
The format used in above sample code is IDL(Interface Description Language). If you compile this language then C++ source will be created. The created C++ source files are consisting of structure declaration, send message, receive message and etc. This means that you don't have to make network handling routine by him or herself since PIDL compiler generates it automatically for you!
Let's go through some of terms that we should be familiar with. As mentioned earlier, there are files that get generated when compiling IDL file. And there is a module that converts one of function calls among these files into a message and sends it to network. This module is called proxy and a module that analyzes the received message then calls for user function is called stub. For example, if host A calls for RMI function called X, then proxy of X gets called, converts to a network message and gets sent to host B. And host B send the received message to stub, which analyzes the message first and calls for function X written by user.
Eventually, as looking at the surface, it appears as host A just calling for function of host B. And this is why it's named as Remote Method Invocation.
The commonly used IDL type or RIM system is simply too heavy and slow that ProudNet has its own custom made Remote Method Invocation (RMI) system which fixes those problems.
In game development, asynchronous RMI, meaning RMIs that don't wait for a returned value of function call, is mostly used. Due to this reason, ProudNet only supports asynchronous RMI.