Je suis très novice avec RMI et j'ai décidé de l'essayer. Je me suis trompé par la méthode exportObject(Object, int)
. La documentation indique:Présentation de la méthode java RMI exportObject
Exporte l'objet distant pour le rendre disponible pour recevoir les appels entrants, en utilisant le port fourni particulier. L'objet est exporté avec une socket serveur créée en utilisant
RMISocketFactory
classe.
Prenons l'exemple simple:
public interface Client extends Remote {
void clientMethod() throws RemoteException;
}
public class ClientImpl implements Client {
public clientMethod() throws RemoteException {
System.out.println("clientMethod invoked");
}
}
Client stub = (Client) UnicastRemoteObject
.exportObject(new ClientImpl(), 56789); //<------ HERE
Nous créons donc un talon et le transfère à un autre VM
manuellement ou par RmiRegistry
, n'a pas d'importance ici.
Je suis confus par "[...] l'objet est exporté avec un socket serveur [...]"
Que signifient-ils par là?
Cela signifie que l'objet distant côté serveur contiendra une socket serveur. Votre stub 'Client' contient une socket serveur sur le serveur et une socket client sur le client. Votre 'Client' est un serveur sauf s'il s'agit d'un client. –
Avec tout le sérieux maintenant, comprenez-vous Java [ServerSocket] (https://docs.oracle.com/javase/8/docs/api/java/net/ServerSocket.html)? Il écoute les demandes TCP entrantes, et c'est là que RMI opère au niveau du réseau. –
@ E_net4 Ainsi, lorsque nous transférons le talon à une autre VM (VM 0), le talon contiendra une connexion socket à la VM (VM 2) à laquelle il a été initialement créé. La VM 2 de trurn maintiendra un socket serveur pour accepter les invocations de méthode entrantes. Est-ce exact? –