Java 远程动态代理 我知道,曾经,开发远程代理包括生成存根/骨架,尽管由于反射,现在不再需要了。(动态代理)
我想得到一个清晰的解释,为什么以及如何用反射来代替这种需要。 例如,据我所知,存根是用来处理网络上的通信的(如果远程对象位于不同的计算机上),另外还负责序列化/反序列化等。。。现在谁负责这件事 也许我把动态代理的概念搞错了 另外,我还阅读了有关java和RMI的主题,C++中如何实现远程代理, 我可能可以使用DCOM,有没有其他更简单的方法?(我是否不再需要DCom或类似java的存根/框架?)Java 远程动态代理 我知道,曾经,开发远程代理包括生成存根/骨架,尽管由于反射,现在不再需要了。(动态代理),java,c++,com,proxy,rmi,Java,C++,Com,Proxy,Rmi,我想得到一个清晰的解释,为什么以及如何用反射来代替这种需要。 例如,据我所知,存根是用来处理网络上的通信的(如果远程对象位于不同的计算机上),另外还负责序列化/反序列化等。。。现在谁负责这件事 也许我把动态代理的概念搞错了 另外,我还阅读了有关java和RMI的主题,C++中如何实现远程代理, 我可能可以使用DCOM,有没有其他更简单的方法?(我是否不再需要DCom或类似java的存根/框架?) 谢谢假设您有一个接口A,而类B实现了A 服务器VM有一个B实例;它与一个名字相关联;服务器在TCP端
谢谢假设您有一个
接口A
,而类B实现了A
服务器VM有一个B实例;它与一个名字相关联;服务器在TCP端口上侦听客户端通信。大概是这样的:
Server server = new Server(localhost, port);
server.bind("bbbb", new B() );
在客户端VM上,您希望访问驻留在服务器VM上的B对象。您需要获得对它的引用(类型a)
bb
是a
的子类,由java.lang.reflect.Proxy
创建。bb
上的任何方法调用都由InvocationHandler
处理,该处理程序以任何方式对调用进行编码,并通过网络将其发送到其他服务器。服务器收到一个请求“在名为bbbb的对象上调用此名称的方法[使用这些参数]”,并且服务器通过反射执行该任务没有问题。然后以类似的方式将返回值发送回客户机
所以你自己做这件事并不难。Sun的RMI可能也在做同样的事情(RMI还有一些其他功能,比如远程垃圾收集)。请参见假设您有一个
接口A
,而类B实现了一个
服务器VM有一个B实例;它与一个名字相关联;服务器在TCP端口上侦听客户端通信。大概是这样的:
Server server = new Server(localhost, port);
server.bind("bbbb", new B() );
在客户端VM上,您希望访问驻留在服务器VM上的B对象。您需要获得对它的引用(类型a)
bb
是a
的子类,由java.lang.reflect.Proxy
创建。bb
上的任何方法调用都由InvocationHandler
处理,该处理程序以任何方式对调用进行编码,并通过网络将其发送到其他服务器。服务器收到一个请求“在名为bbbb的对象上调用此名称的方法[使用这些参数]”,并且服务器通过反射执行该任务没有问题。然后以类似的方式将返回值发送回客户机
所以你自己做这件事并不难。Sun的RMI可能也在做同样的事情(RMI还有一些其他功能,比如远程垃圾收集)。请参见如果我没有弄错的话,存根/骨架是由rmic工具静态创建的,而现在整个过程是动态的 这并不是说它一定“更好”,而是省去了编译存根和骨架的麻烦。在这两种情况下,请求参数和响应都是以相同的方式在相同的级别上序列化的 至于问题#1:RMI的一些实现使用Corba,所以如果代码可用,您可能想看看
您需要的是将C++代码与CORBA层连接为存根/骨架。
< P>如果我没有错,存根/骨架是由RMIC工具静态创建的,而整个过程是动态的。p> 这并不是说它一定“更好”,而是省去了编译存根和骨架的麻烦。在这两种情况下,请求参数和响应都是以相同的方式在相同的级别上序列化的 至于问题#1:RMI的一些实现使用Corba,所以如果代码可用,您可能想看看你需要的是将C++代码与CORBA层连接,就像存根/骨架一样。
我仍然没有得到它…那么你说调用处理程序取代了存根/骨架的使用?这里的反射和过去没有反射有什么区别?我还是不明白。。。那么你说调用处理程序取代了存根/骨架的使用?这里的反射和过去没有反射有什么区别?