18.分布式计算
远程部署的RMI
距离不是问题
方法的调用都是发生在相同堆上的两个对象之间
如果要调用不同机器上的对象的方法呢
远程过程调用设计
- 创建客户端和服务器应用程序.服务器应用程序是个远程服务,是个带有客户端会调用的方法的对象
- 创建客户端和服务器的辅助设施.用于处理底层网络输入输出细节
辅助设施的任务
调用方法的过程
- 客户端对象对辅助设施对象调用doBigThing()
- 客户端辅助设置把调用信息打包通过网络送到服务器的辅助设置
- 服务端的辅助设施解开来自客户端辅助设施的信息,并以此调用真正的服务
Java RMI提供客户端和服务器端的辅助设施对象
- 客户端辅助设施称为stub
- 服务端辅助设施称为skeleton
创建远程服务
- 创建Remote接口
- 实现Remote接口
- 用rmic产生stub与skeleton
- 启动 RMI registry(rmiregistry)用户会从此处取得代理
- 启动远程服务
要点
...
关于servlet
要点
- servlet 事完全在HTTP服务器上运行的 Java 程序。
- servlet 用来处理与用户交互的网页程序。例如用户提交一些信息给服务器,servlet就可以处理信息并把特定的结果以网页的形式返回给用户。
- 你需要servlets.jar 文件中的servelet相关包才能编译出servlet。它不是标准函数库的一部分,所以需要从java.sun.com活Web服务器供货商处取得。
- 你不许要有支持servlet 的web服务器才能运行servlet,比如apache.org的Tomcat。
- servlet 必须 放在特定的位置才能执行,如果Web服务器是向IPS租借的,他会告诉你应该放在哪个目录。
- 一般的servlet是继承HttpServlet并覆盖doGet()和doPost()来创建的。
- Web服务器会根据用户的请求来启动并调用servlet上对应的方法
- servlet可以通过doGet()的响应参数取得输出串流来租车响应的网页
- servlet要输出带有完整标志的HTML网页
Jini
- 也使用了RMI
- adaptive discovery (自适应探索)
- self-healing networks(自适应恢复网络)
自适应探索的运作
- Jini查询服务在网络上启动,并使用IP组播技术为自己宣传做事
- 已经启动的另外一个Jini服务会寻求想刚启动的查询服务注册.他注册的是功能的而不是名称,也就是所实现的接口,然后送出序列化对象给查询服务.
- 网络客户端想要取得实现功能的方法,可是不知道哪里有,所以就问查询服务.
- 查询服务响应查询的结果
自恢复网络的运作
- 某个Jini服务要求注册,查询服务会给一份租约.新注册的服务必须要定期更新租约,不然查询服务会假设此服务已经离线了.查询服务会力求呈现精确完整的可用服务网络状态
- 因为关机所以服务离线,因此也没有更新租约,查询服务就把它踢掉
终极任务: 通用服务浏览器
通用服务浏览器运作方式
- 用户启动并查询在RMI 上 注册为 ServiceServer的服务,然后取回stub
- 客户端端对stub调用getServiceList(),他会返回服务的数组
- 客户端以GUI显示出服务对象的清单
- 用户从清单选择,因此客户端调用getService取得实际服务的序列化对象然后再客户端的浏览器上执行
- 客户端调用刚取得序列化对象的getGuiPanel().此服务的GUI会显示在浏览器中,且用户可与它在本机上交互,此时就不需要远程服务了.
- 本文链接: https://halo.cjh.kim/archives/headfirstjava18md
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!