java - 远程和动态代理

标签 java c++ com proxy rmi

  1. 我知道,曾经,开发远程代理包括生成 stub /骨架,但今天由于反射不再需要它。 (动态代理)

我想清楚地解释反射为何以及如何取代这种需求。 例如,我知道 stub 应该处理网络通信(如果远程对象在另一台计算机上),加上负责序列化/反序列化等......现在谁负责?

也许我完全弄错了动态代理的概念。

  1. 此外,我还阅读了有关 Java 和 Rmi 的主题,我将如何在 C++ 中实现远程代理, 我可能可以使用 DCOM,还有其他更简单的方法吗? (我是否需要 DCom 中的 stub /骨架或不再需要 Java?)

谢谢

最佳答案

假设您有一个接口(interface) AB 类实现 A

服务器VM有一个B实例;它与一个名字相关联;服务器监听 TCP 端口以进行客户端通信。像这样:

Server server = new Server(localhost, port);
server.bind("bbbb", new B() );

在客户端 VM 上,您想要访问驻留在服务器 VM 上的 B 对象。您需要获得对它的引用(类型 A)

A bb = lookup(serverIp, port, "bbbb");

bbA 的子类,由 java.lang.reflect.Proxy 创建。 bb 上的任何方法调用都由 InvocationHandler 处理,它以任何方式对调用进行编码,并通过网络将其发送到那里的服务器。服务器收到“在名为 bbbb 的对象上调用此名称的此方法 [使用这些参数]” 的请求,并且服务器可以通过反射执行该任务没有问题。然后将返回值以类似的方式发送回客户端。

所以自己做这个真的不难。 Sun 的 RMI 可能也在做同样的事情(RMI 有一些其他的特性,比如远程垃圾收集)。见http://java.sun.com/j2se/1.5.0/docs/guide/rmi/relnotes.html

关于java - 远程和动态代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1843409/

相关文章:

c++ - OpenCV C++ 接口(interface)如何管理 ROI

c++ - FAST角点检测器中分数计算背后的算法

com - 是否有允许 URL 编码的 COM 可访问库?

.net - 在 .Net 和 COM 程序集之间传递数据的性能

c# - Excel COM 互操作 - 为什么返回类型通常是动态的?

java - Jasper 报告 - 在将参数传递给报告引擎之前进行参数转换?

c++ - 循环包含和前向声明类

java - 如何在我自己的API中实现Dicom属性字典

java - 在 openNLP 中编写我们自己的模型

java - 使用 Google 应用引擎或 Lucene 通过关键字映射进行搜索