18.分布式计算

远程部署的RMI

距离不是问题

方法的调用都是发生在相同堆上的两个对象之间

如果要调用不同机器上的对象的方法呢

远程过程调用设计

  1. 创建客户端和服务器应用程序.服务器应用程序是个远程服务,是个带有客户端会调用的方法的对象
  2. 创建客户端和服务器的辅助设施.用于处理底层网络输入输出细节

辅助设施的任务

调用方法的过程

  1. 客户端对象对辅助设施对象调用doBigThing()
  2. 客户端辅助设置把调用信息打包通过网络送到服务器的辅助设置
  3. 服务端的辅助设施解开来自客户端辅助设施的信息,并以此调用真正的服务

Java RMI提供客户端和服务器端的辅助设施对象

  1. 客户端辅助设施称为stub
  2. 服务端辅助设施称为skeleton

创建远程服务

  1. 创建Remote接口
  2. 实现Remote接口
  3. 用rmic产生stub与skeleton
  4. 启动 RMI registry(rmiregistry)用户会从此处取得代理
  5. 启动远程服务

要点

...

关于servlet

要点

  1. servlet 事完全在HTTP服务器上运行的 Java 程序。
  2. servlet 用来处理与用户交互的网页程序。例如用户提交一些信息给服务器,servlet就可以处理信息并把特定的结果以网页的形式返回给用户。
  3. 你需要servlets.jar 文件中的servelet相关包才能编译出servlet。它不是标准函数库的一部分,所以需要从java.sun.com活Web服务器供货商处取得。
  4. 你不许要有支持servlet 的web服务器才能运行servlet,比如apache.org的Tomcat。
  5. servlet 必须 放在特定的位置才能执行,如果Web服务器是向IPS租借的,他会告诉你应该放在哪个目录。
  6. 一般的servlet是继承HttpServlet并覆盖doGet()和doPost()来创建的。
  7. Web服务器会根据用户的请求来启动并调用servlet上对应的方法
  8. servlet可以通过doGet()的响应参数取得输出串流来租车响应的网页
  9. servlet要输出带有完整标志的HTML网页

Jini

  1. 也使用了RMI
  2. adaptive discovery (自适应探索)
  3. self-healing networks(自适应恢复网络)

自适应探索的运作

  1. Jini查询服务在网络上启动,并使用IP组播技术为自己宣传做事
  2. 已经启动的另外一个Jini服务会寻求想刚启动的查询服务注册.他注册的是功能的而不是名称,也就是所实现的接口,然后送出序列化对象给查询服务.
  3. 网络客户端想要取得实现功能的方法,可是不知道哪里有,所以就问查询服务.
  4. 查询服务响应查询的结果

自恢复网络的运作

  1. 某个Jini服务要求注册,查询服务会给一份租约.新注册的服务必须要定期更新租约,不然查询服务会假设此服务已经离线了.查询服务会力求呈现精确完整的可用服务网络状态
  2. 因为关机所以服务离线,因此也没有更新租约,查询服务就把它踢掉

终极任务: 通用服务浏览器

通用服务浏览器运作方式

  1. 用户启动并查询在RMI 上 注册为 ServiceServer的服务,然后取回stub
  2. 客户端端对stub调用getServiceList(),他会返回服务的数组
  3. 客户端以GUI显示出服务对象的清单
  4. 用户从清单选择,因此客户端调用getService取得实际服务的序列化对象然后再客户端的浏览器上执行
  5. 客户端调用刚取得序列化对象的getGuiPanel().此服务的GUI会显示在浏览器中,且用户可与它在本机上交互,此时就不需要远程服务了.