Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 远程动态代理 我知道,曾经,开发远程代理包括生成存根/骨架,尽管由于反射,现在不再需要了。(动态代理)_Java_C++_Com_Proxy_Rmi - Fatal编程技术网

Java 远程动态代理 我知道,曾经,开发远程代理包括生成存根/骨架,尽管由于反射,现在不再需要了。(动态代理)

Java 远程动态代理 我知道,曾经,开发远程代理包括生成存根/骨架,尽管由于反射,现在不再需要了。(动态代理),java,c++,com,proxy,rmi,Java,C++,Com,Proxy,Rmi,我想得到一个清晰的解释,为什么以及如何用反射来代替这种需要。 例如,据我所知,存根是用来处理网络上的通信的(如果远程对象位于不同的计算机上),另外还负责序列化/反序列化等。。。现在谁负责这件事 也许我把动态代理的概念搞错了 另外,我还阅读了有关java和RMI的主题,C++中如何实现远程代理, 我可能可以使用DCOM,有没有其他更简单的方法?(我是否不再需要DCom或类似java的存根/框架?) 谢谢假设您有一个接口A,而类B实现了A 服务器VM有一个B实例;它与一个名字相关联;服务器在TCP端

我想得到一个清晰的解释,为什么以及如何用反射来代替这种需要。 例如,据我所知,存根是用来处理网络上的通信的(如果远程对象位于不同的计算机上),另外还负责序列化/反序列化等。。。现在谁负责这件事

也许我把动态代理的概念搞错了

另外,我还阅读了有关java和RMI的主题,C++中如何实现远程代理, 我可能可以使用DCOM,有没有其他更简单的方法?(我是否不再需要DCom或类似java的存根/框架?)
谢谢

假设您有一个
接口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层连接,就像存根/骨架一样。

我仍然没有得到它…那么你说调用处理程序取代了存根/骨架的使用?这里的反射和过去没有反射有什么区别?我还是不明白。。。那么你说调用处理程序取代了存根/骨架的使用?这里的反射和过去没有反射有什么区别?