Java 简单RMI回调示例

Java 简单RMI回调示例,java,callback,rmi,Java,Callback,Rmi,有人能给出一个简单的RMI回调Hello World的例子吗?我一直在研究它,但我似乎找不到一个我理解的。我不明白回调是什么 这是我目前的Hello World RMI,如果有帮助的话 接口 package example.hello; import java.rmi.Remote; import java.rmi.RemoteException; public interface Hello extends Remote { String sayHello() throws Rem

有人能给出一个简单的RMI回调Hello World的例子吗?我一直在研究它,但我似乎找不到一个我理解的。我不明白回调是什么

这是我目前的Hello World RMI,如果有帮助的话

接口

package example.hello;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Hello extends Remote {
    String sayHello() throws RemoteException;
}
客户

package example.hello;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Client {

    private Client(){}

    public static void main(String[] args){

        String host = (args.length < 1) ? null : args[0];

        try{
            Registry registry = LocateRegistry.getRegistry(host);
            Hello stub = (Hello) registry.lookup("Hello");
            String response = stub.sayHello();
            System.out.println("response: " + response);
        } catch (Exception e) {
            System.err.println("Client exception: " + e.toString());
            e.printStackTrace();
        }
    }

}

我不是RMI方面的专家,但我可以告诉你,你可以从“David和Michael Reilley”中搜索“Java网络编程和分布式计算”一书。您将能够找到从第278页开始的RMI回调实现的一个很好的示例

作者定义了一种理解它的好方法,因此我认为复制/粘贴比尝试制作自己的更好,如下所示:

  • 理解回调的最简单方法是想象一个电话。假设你想知道某个股票价格是否达到某个水平,当它达到某个水平时,你让你的经纪人回电话。当经纪人(事件的来源)回电话时注意到股票价格反映了您的参数,他或她会给您回电话,通知您新的价格。这是回拨。“
在默认实现中,RMI只允许客户端与服务器之间的通信,请求服务器主机中的远程服务(远程对象)的操作。您可以使用回调方法,而不是让服务器与客户端对话

太好了!想象一下,如果你有一台服务器,你想检查它是否在线(或者如果没有放下/关闭)trought客户端!您必须请求连续使用远程对象,该对象应返回一些布尔值(例如),告诉您该对象实际上是在线的

那太可怕了!因为你会失去一些网络带宽,请求一次又一次地进入服务器。。。造成了一些连接池

也就是说,wy应该是有用的,在这些情况下使用CALLBACK;-)

我希望你能通过我的回答稍微了解一下回调是什么


最好的祝愿,

也许本文的第4章:将帮助您理解RMI的回调
package example.hello;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

public class Server implements Hello {

    public Server(){}

    @Override
    public String sayHello() {
        System.out.println("responded!");
        return "Hello, world!";
    }

    public static void main(String[] args) {

        try{
            Server obj = new Server();
            Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);

            // Bind the remote object's stub in the registry
            Registry registry = LocateRegistry.getRegistry();
            registry.bind("Hello", stub);

            System.err.println("Server ready");
        } catch (Exception e) {
            System.err.println("Server exception: " + e.toString());
            e.printStackTrace();
        }
    }
}