En un entorno informático distribuido , la comunicación de objetos distribuidos realiza la comunicación entre objetos distribuidos . La función principal es permitir que los objetos accedan a los datos e invoquen métodos en objetos remotos (objetos que residen en un espacio de memoria no local ). La invocación de un método en un objeto remoto se conoce como invocación de método remoto ( RMI ) o invocación remota , y es el análogo de programación orientada a objetos de una llamada a procedimiento remoto (RPC).
El método más utilizado para implementar el canal de comunicación se realiza mediante el uso de stubs y esqueletos . Son objetos generados cuya estructura y comportamiento dependen del protocolo de comunicación elegido, pero que en general proporcionan una funcionalidad adicional que garantiza una comunicación confiable a través de la red.
En RMI, el programador define un stub (que es el bit del cliente) como una interfaz . El rmic (compilador de rmi) lo utiliza para crear el stub de la clase. El stub realiza la verificación de tipos. El esqueleto se define en una clase que implementa el stub de la interfaz. [1]
Cuando un llamador desea realizar una llamada remota al objeto llamado, delega las solicitudes a su stub , que inicia la comunicación con el esqueleto remoto . En consecuencia, el stub pasa los argumentos del llamador a través de la red al esqueleto del servidor. Luego, el esqueleto pasa los datos recibidos al objeto llamado, espera una respuesta y devuelve el resultado al stub del cliente. Tenga en cuenta que no hay comunicación directa entre el llamador y el objeto llamado.
Más detalladamente, la comunicación consta de varios pasos:
La ventaja de esta arquitectura es que ni el que llama ni el objeto llamado tienen que implementar lógica relacionada con la red. Esta funcionalidad, que garantiza un canal de comunicación confiable a través de la red, se ha trasladado a la capa de stub y esqueleto .
El objeto del lado del cliente que participa en la comunicación de objetos distribuidos se conoce como stub o proxy , y es un ejemplo de un objeto proxy .
El stub actúa como una puerta de enlace para los objetos del lado del cliente y todas las solicitudes salientes a los objetos del lado del servidor que se enrutan a través de él. El stub envuelve la funcionalidad del objeto del cliente y, al agregar la lógica de red, garantiza un canal de comunicación confiable entre el cliente y el servidor. El stub se puede escribir manualmente o generar automáticamente según el protocolo de comunicación elegido.
El stub es responsable de:
El objeto del lado del servidor que participa en la comunicación de objetos distribuidos se conoce como esqueleto (o stub; término que se evita aquí).
Un esqueleto actúa como puerta de enlace para los objetos del lado del servidor y todas las solicitudes entrantes de los clientes se enrutan a través de él. El esqueleto envuelve la funcionalidad del objeto del servidor y la expone a los clientes; además, al agregar la lógica de red, garantiza un canal de comunicación confiable entre los clientes y el servidor. Los esqueletos se pueden escribir manualmente o generar automáticamente según el protocolo de comunicación elegido.
El esqueleto es responsable de: