# SYD - TP 1 (QBO / LDU / CTH)
[Sujet](https://github.com/INSA-TC/rpc/tree/master/sujet)
###### tags : `SYD` `TP`
## RPC (Remote Procedure Call) - 4h
Le but du td et du tp associé est de fabriquer un système rpc minimaliste.
A la fin des deux séances (et de quelques heures de travail personnel) vous devez comprendre à quoi servent les systèmes rpc. Quelles sont les difficultés de mise en oeuvre, et les éléments commun à tous ces systèmes.
**Un système rpc est un système capable d'invoquer des fonctions entre deux machines autonomes**
Que signifie cette dernière phrase ?
**La question posée est la suivante :**
Comment faire pour qu'un code initialement développé de manière monolithique puisse être exécuté sur deux machines, sans avoir à réécrire du code spécifique ?
Exemple monolithique :
```java
package rpc;
public class Client {
public static void main(String [] arg) {
Voiture v = new Voiture();
Trajet t = v.roule("Paris", "Marseille");
System.out.println(t);
}
}
package rpc;
public class Voiture {
public Trajet roule(String from, String to) {
return new Trajet();
}
}
package rpc;
public class Trajet {
}
```
Vous pouvez compiler et tester ce code pour constater qu'il fonctionne.
```bash
$ javac -d . *.java
$ java rpc.Client
rpc.Trajet@3764951d
```
### Problématique
Comment transformer ce code pour qu'il puisse s'exécuter sur deux machines distinctes ? Outre le fait que le résultat de l'exécution doit être le même, la question est de modifier le moins possible le code initial.
---