# Socket e RMI ## Socket Per i sockets vatti a leggere la documentazione. ## RMI RMI, Remote Method Invocation si basa sul concetto di Proxy: in pratica RMI ci permette di accedere a un oggetto remoto con interfaccia remota come se fosse un oggetto qualsiasi in locale. Un paio di termini: - $stub$ : interfaccia locale del oggetto remoto. - $skeleton$ : riceve i risultati del client lato server. - marshals/unmarshals : serializzazione In RMI viene utilizzato un Registry per collegarci attraverso gli ip/porta ai vari oggetti, anzi interfacce di tali oggetti. Sostanzialmente l'interfaccia remota deve ereditare la classe Remote, mentre l'oggetto vero e proprio deve ereditare la classe UnicastRemoteObject e implementare l'interfaccia remota. In genere il Registry gira sulla stessa macchina del server ma in un eseguibile diverso. ````Java //SERVER SIDE Server server = new Server(); serverStub stub = server; //interface of Server Remote Object Registry registry = LocateRegistry.createRegistry(PORT); registry.bind("server", stub); //Binding server stub ```` Il client fa 'lookup' dell'oggetto remoto utilizzando il Registry (identificato con indirizzo ip e porta) usando LocateRegistry.getRegistry. ````Java //CLIENT SIDE Registry registry = LocateRegistry.getRegistry(IP, PORT); //magic Server server = (serverStub) registry.lookup("server"); // wHat a tImE to be aLiVe! ````