---
# System prepended metadata

title: SYD - TP 1 (QBO / LDU / CTH)
tags: [TP, SYD]

---

# 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.

---

