`
hzh0725
  • 浏览: 80440 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jdk rmi 代码分析

    博客分类:
  • java
阅读更多
RMI
早期对于rmi来说,客户端需要stub,服务器端需要skeleton.
  • jdk因为有了反射,而不需要Skeleton
  • jdk因为有了aop,而不需要Stub
  • 对于Registry来说,还是使用默认RegistryImpl_Skel,RegistryImpl_Stub.

  • 什么是rmi
    我在这里不解释他的字面意思,因为这个太原始

    rmi是sun开发,遵循JRMP协议,因为他被发布在jre中,所有很多人只把它当作很普通的api来使用,所以它里面做了什么,很多人都不清楚.

    rmi到底是什么?
    • rmi是一套足够优秀的socket框架.
    • rmi是相对比较简单命名服务
    • rmi是aop的经典实用例子
    • 相关辅助功能,比如本地GC


    socket框架
    socket框架在早期就是起一个serversocket,socket来连接它,server根据传过来的key来做相应的返回(自己的协议),这是最原始的网络开发。

    目前企业开发都是面向对象,什么都是以对象为单位,所有socket框架首先就应该隐藏上面的协议,以对象为单位。
  • 对象调用
  • 比如:Hello是一个接口,有一个print()方法。

    Hello hello = ... 记住得到hello这个对象是使用aop包装过的Hello对象(jdk1.5以后,如果以前的版本得到是Hello_Stub,这个需要预先生产)
    hello.print();    远程调用在这里,包括返回。

  • 对象暴露
  • 使用:java.rmi.server.UnicastRemoteObject.exportObject(Remote obj,int port)

    在暴露的过程中产生相关remote接口的aop实现,并注册到registry中去.


    命名服务
    服务器端对象暴露,并把接口的aop实现注册到registry中去,客户端只需要registry.lookup接口的aop即可,并可以通过这个aop接口实现于接口真正实现通信。

    aop
    目前aop,在运行态使用的,我知道有两种一种是jdk中java.lang.reflect,一个就是asm。其他的好像对他们的包装,比如cglib.

    rmi的log
    rmi日志管理使用java.util.logging

    例子logging.properties

    handlers= java.util.logging.FileHandler
    .level= SEVERE
    java.util.logging.FileHandler.level = ALL
    java.util.logging.FileHandler.pattern = d:\\java1.log 
    java.util.logging.FileHandler.limit = 50000
    java.util.logging.FileHandler.count = 1
    java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
    sun.rmi.transport.level = FINE


    rmi端口
    rmi分两个端口
  • rmi名称服务端口
  • api使用方法:LocateRegistry.createRegistry(端口)
  • 服务端口
  • api使用方法:UnicastRemoteObject.exportObject(服务对象,端口),多次调用这个方法,如果端口一样,会使用同一个serversocket,不会发生错误

    spring使用
    spring使用包装过的rmi,服务对象不再需要实现Remote接口,
    我们平时使用只会使用registryPort,而不是忘记使用servicePort.如果不指定servicePort,servicePort=0,将会有系统指定。

    rmi属性
  • sun.rmi.transport.tcp.readTimeout:
  • 等同于socket.setSoTimeout(int timeout),RMI默认值是2 * 3600 * 1000,2个小时.
  • sun.rmi.transport.tcp.handshakeTimeout:
  • socket握手超时设置,默认一分钟.
  • sun.rmi.transport.tcp.responseTimeout:
  • socket 读超时设置,只有当RMISocketFactory相关属性没有设置,才起作用,默认不超时
  • sun.rmi.transport.connectionTimeout:
  • rmi的socket是长期连接的,只有timeout时,才会socket.close();默认是的值是15
  • sun.rmi.transport.tcp.responseTimeout:
  • 客户端socket的timeout, 默认不超时
    1
    0
    分享到:
    评论
    1 楼 surprising 2015-09-28  
    [color=darkred][/color]交换机

    相关推荐

      spring rmi 源码

      spring rmi 远程调用服务端和客户端源码,eclipse环境,jdk1.7.

      Java RPC和RMI代码实战

      Java RPC和RMI代码实战,有关键注释,为最简案例。Maven搭建,JDK8编译。 RPC体验:依次运行RpcProvider和RpcConsumer类。 RMI体验:RMITest中依次运行testServer和testClient方法。

      java RMI 详解,实例加原理,想不理解都难

      这是java RMI 详解,通过例子加原理的解说,分步骤,通过简单的代码行行解释,看完想不会都难

      rmi技术客户端调用服务器的函数解决问题

      rmi技术客户端调用服务器的函数解决问题 刚刚开始准备这个rmi作业的时候,我都有点无从下手。于是我先开始一起找资料,看书,经过不断的尝试...而且创建包jdk不一样也会导致最后代码无法运行,所以要创建新的文件。

      RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序

      NULL 博文链接:https://javasam.iteye.com/blog/1848846

      rmi 聊天室

      rmi 聊天室 自己改下批处理文件路径就可以运行啦,jdk1.6编译的,源码在src里,课程作业,供大家参考

      用RMI实现的QQ聊天室(带注册和传文件功能)

      用JavaRMI框架实现,组合了JProgressBar,注意服务器启动用Start.jar不要用Service.jar,客户端是Client.jar可开多个,已经进行过局域网测试(JDK1.5)。注册功能,但要先建个邮件服务器,其中建立一个域,建一个...

      Java开发基于rmi的数据库中间件设计源码,并利用中间件建立一个数据库应用(Java web项目),分布式对象技术课程实践

      Java开发基于rmi的数据库中间件设计源码,并利用中间件建立一个数据库应(Java web项目),分布式对象技术课程实践 主机安装Node.js,并在控制台进入front-end-pages目录下,按顺序执行以下命令运行前端: npm install ...

      JDK_1_6 API

      javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 javax.management.timer 提供对 Timer MBean(计时器 MBean)的定义。 javax....

      吉林大学软件学院服务计算概论第二次作业

      注:JDK1.3版本或更低的版本支持java.rmi.Naming,JDK1.3以后将命名服务API整合到JNDI中,javax.naming.Context声明了注册、查找,以及注销对象的方法。 三、实验要求 (1) 对关键代码解释清楚; (2) 远程对象...

      Open JDK有3种实现的compact JRE,数字越大,功能越丰富.docx

      Sun公司根据不同业务领域方向分成了四个JDK版本: Java Card,主要是以具有安全防护性的方式来执行小型的Java Applet,广泛运用在SIM卡、提款卡上; Java SE,前称J2SE。Java的标准版,为JavaEE和JavaME提供了...

      [Java参考文档].JDK_API 1.6

      javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 javax.management.timer 提供对 Timer MBean(计时器 MBean)的定义。 javax....

      javaee登陆页面源码-XJTLU-CSE406:XJTLU-CSE406课程练习代码

      idea,使用maven构建,采用JDK1.8 1. 项目说明 项目的依赖管理使用maven,详见pom.xml。 本项目分为四个模块: java-ee Servlet相关知识课堂Demo jdbc JDBC相关知识课堂Demo jms JMS相关知识课堂Demo rmi RMI相关...

      jcpp:C ++开发的方式有所不同,包括自省,RMI,GC(垃圾收集)等Java方式

      联合会 C ++是一种非常丰富而强大的...理想情况下,每个JDK版本都应该提供一个JCPP版本,如果Oracle如此认为,我将非常高兴... 查看Wiki以获取更多详细信息。 许可证:如有兴趣,请联系。 仍在努力,但应该非常友好

      JAVA网络编程.第3版.哈诺德著.扫描版.含源码

      本书讨论了JDK1.4和1.5(现在已命名为J2SE5)中所做的所有修改和增补。本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDPsocket、服务器socket、URL和URI、组播以及...

      Java核心编程技术源码

      Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、编码规范。Java核心编程:流、多线程、实体类、集合类、正则表达式、XML、属性文件。Java图形编程:AWT(Java2D、...

      j2ee学习方向指导J2SE

      J2SE的Swing、Applet、Net、RMI、Collections、 IO、JNI……J2EE的JDBC、Sevlet、JSP、JNDI…..JDK中Collections、 Logger、IO…..的源代码

      java网络编程

      本书讨论了JDK 1.4和1.5(现在已命名为J2SE 5)中所做的所有修改和增补。本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播...

      网络编程经典书籍

      本书讨论了JDK1.4和1.5(现在已命名为J2SE5)中所作的所有修改和增补。本书内容全面涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章集涉及到TCP和UDP socket 、服务器socket、URL和URI、组播以及...

    Global site tag (gtag.js) - Google Analytics