- 浏览: 399365 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (760)
- 股票日志 (26)
- Selenium (0)
- selenium 2 环境的搭建 (1)
- 并发 (7)
- 框架开发 (1)
- 动态代理 (2)
- Struts2 (2)
- POI (2)
- jdk (3)
- maven (31)
- spring (35)
- mysql (31)
- 工作机会 (3)
- xtream (1)
- oracle dbms_metadata GET_DDL (0)
- SSI (1)
- DB (61)
- powermock (4)
- java 基础 (25)
- 多线程 (11)
- 高手 (2)
- java 底层 (2)
- 专业网站 (1)
- 开发联想 (1)
- 开发联想 (1)
- bat文件 (2)
- 清queue 语句 (1)
- 清queue 语句 (1)
- jquery (7)
- html5 (1)
- Jenkins (10)
- Linux (17)
- 工作issue (2)
- tomcat log (3)
- jvm (23)
- 项目细节 (0)
- oracle (41)
- 泛型 (3)
- 新知识点 (1)
- 数据库ddl 语句 (0)
- AQ (2)
- jms (0)
- 网络资源 (6)
- github (6)
- Easymock (1)
- Dom 解析XML (1)
- windows命令 (2)
- java (7)
- 正则表达式 (5)
- sequence (1)
- oracle 表meta信息 (1)
- 小工具技巧 (1)
- 辅助工具 (1)
- Junit (1)
- 泛型 generic (2)
- Java程序设计 (1)
- cglib (2)
- 架构师之路 (1)
- 数据库连接池 (5)
- c3p0 (1)
- eclipse使用 (1)
- oracle sql plus (1)
- 码农人生 (3)
- SVN (15)
- sqlplus (2)
- jsoup (1)
- 网络爬虫 (2)
- 新技能 (1)
- zookeeper (4)
- hadoop (1)
- SVNKIT (1)
- 从工具到知识点的整理 (1)
- log4j (13)
- 读文件 (0)
- 转义字符 (1)
- command (1)
- web service (3)
- 锁 (1)
- shell 脚本 (1)
- 遇到的错误 (2)
- tomcat (14)
- 房产 (5)
- bootstrap jquery ui (1)
- easyui (2)
- 个人征信 (1)
- 读写分离 (1)
- 备份 (1)
- rmi (6)
- webservice (1)
- JMX (4)
- 内存管理 (3)
- java设计 (1)
- timer (1)
- lock (2)
- concurrent (2)
- collection (1)
- tns (1)
- java基础 (15)
- File (1)
- 本机资源 (1)
- bat (1)
- windows (4)
- 数据结构 (3)
- 代码安全 (1)
- 作用域 (1)
- 图 (2)
- jvm内存结构 (1)
- 计算机思想 (1)
- quartz (6)
- Mongo DB (2)
- Nosql (4)
- sql (5)
- 第三方Java 工具 jar 项目 (2)
- drools (1)
- java swing (2)
- 调用console (1)
- runtime (1)
- process (1)
- swing (2)
- grouplayout (1)
- dubbo (0)
- bootstrap (0)
- nodejs (2)
- SVN hooks (1)
- jdbc (3)
- jdbc error (1)
- precedure (1)
- partition_key (1)
- active mq (1)
- blob (2)
- Eclipse (6)
- web server (1)
- bootstrapt (2)
- struts (1)
- ajax (1)
- js call back (1)
- 思想境界拓展 (1)
- JIRA (1)
- log (1)
- jaxb (3)
- xml java互相转换 (1)
- 装修 (2)
- 互联网 (2)
- threadlocal (3)
- mybatis (22)
- xstream (1)
- 排序 (1)
- 股票资源 (1)
- RPC (2)
- NIO (3)
- http client (6)
- 他人博客 (1)
- 代理服务器 (1)
- 网络 (2)
- web (1)
- 股票 (5)
- deadlock (1)
- JConsole (2)
- activemq (3)
- oralce (1)
- 游标 (1)
- 12月13日道富内部培训 (0)
- grant (1)
- 速查 (2)
- classloader (4)
- netty (4)
- 设计模式 (2)
- 缓存 (2)
- ehcache (2)
- framework (1)
- 内存分析 (2)
- dump (1)
- memory (2)
- 多高线程,并发 (1)
- hbase (2)
- 分布式系统 (1)
- socket (3)
- socket (1)
- 面试问题 (1)
- jetty (2)
- http (2)
- 源码 (1)
- 日志 (2)
- jni (1)
- 编码约定 (1)
- memorycache (1)
- redis (13)
- 杂谈 (1)
- drool (1)
- blockingqueue (1)
- ScheduledExecutorService (1)
- 网页爬虫 (1)
- httpclient (4)
- httpparser (1)
- map (1)
- 单例 (1)
- synchronized (2)
- thread (1)
- job (1)
- hashcode (1)
- copyonwriteArrayList (2)
- 录制声音 (1)
- java 标准 (2)
- SSL/TLS (1)
- itext (1)
- pdf (1)
- 钻石 (2)
- sonar (1)
- unicode (1)
- 编码 (4)
- html (1)
- SecurityManager (1)
- 坑 (1)
- Restful (2)
- svn hook (1)
- concurrentHashMap (1)
- 垃圾回收 (1)
- vbs (8)
- visual svn (2)
- power shell (1)
- wmi (3)
- mof (2)
- c# (1)
- concurrency (1)
- 劳动法 (1)
- 三国志游戏 (2)
- 三国 (1)
- 洪榕 (2)
- 金融投资知识 (1)
- motan (1)
- tkmybatis mapper (1)
- 工商注册信息查询 (1)
- consul (1)
- 支付业务知识 (2)
- 数据库备份 (1)
- 字段设计 (1)
- 字段 (1)
- dba (1)
- 插件 (2)
- PropEdit插件 (1)
- web工程 (1)
- 银行业知识 (2)
- 国内托管银行 (1)
- 数据库 (1)
- 事务 (2)
- git (18)
- component-scan (1)
- 私人 (0)
- db2 (14)
- alias (1)
- 住房 (1)
- 户口 (1)
- fastjson (1)
- test (6)
- RSA (2)
- 密钥 (1)
- putty (1)
- sftp (1)
- 加密 (1)
- 公钥私钥 (3)
- markdown (1)
- sweet (1)
- sourcetree (1)
- 好工具 (1)
- cmd (1)
- scp (1)
- notepad++ (1)
- ssh免密登录 (1)
- https (1)
- ssl (2)
- js (2)
- h2 (1)
- 内存 (2)
- 浏览器 (1)
- js特效 (1)
- io (1)
- 乱码 (1)
- 小工具 (1)
- 每周技术任务 (1)
- mongodb (7)
- 内存泄漏 (1)
- 码云 (2)
- 如何搭建java 视频服务器 tomcat (1)
- 资源 (1)
- 书 (1)
- 四色建模法 (1)
- 建模 (1)
- 配置 (1)
- 职位 (1)
- nginx (1)
- excel (1)
- log4j2 (2)
- 做菜 (1)
- jmap (1)
- jspwiki (1)
- activiti (1)
- 工作流引擎 (1)
- 安卓 (1)
- acitviti 例子 (1)
- 二维码 (1)
- 工作流 (1)
- powerdesign (2)
- 软件设计 (1)
- 乐观锁 (1)
- 王者荣耀 (1)
- session (2)
- token (5)
- cookie (4)
- springboot (24)
- jwt (2)
- 项目路径 (1)
- magicbook (1)
- requestType (1)
- json (2)
- swagger (1)
- eolinker (1)
- springdata (1)
- springmvc (1)
- controlleradvice (1)
- profile (1)
- 银行四要素 (1)
- 支付人员资源 (1)
- 支付渠道 (1)
- yaml (1)
- 中文编码 (1)
- mongo (2)
- serializable (1)
- 序列化 (1)
- zyd (1)
- unittest (1)
- 工具 (1)
- Something (1)
- 通达信 (1)
- protobuf (1)
- 算法 (1)
- springcloud (2)
- hikari (1)
- rocketmq (7)
- cachecloud (1)
- serfj (1)
- axure (1)
- lombok (1)
- 分布式锁 (1)
- 线程 (2)
- 同步代码块 (1)
- cobar (1)
- mq (1)
- rabbitmq (1)
- 定时执行 (1)
- 支付系统 (3)
- 唱歌 (1)
- elasticjob (1)
- 定时任务 (1)
- 界面 (1)
- flink (2)
- 大数据 (1)
- 接私活 (0)
- 内部培训 (2)
最新评论
-
dannyhz:
做股票从短线 试水,然后 慢慢发现 波段和 中期的故事可挖, ...
搭台唱戏 -
dannyhz:
http://developer.51cto.com/art/ ...
如何自己开发框架 它的注意点是什么
RMI(Remote Method Invocation)远程方法调用是 java 的核心技术之一。是 Enterprise JavaBeans 的基础技术,是 java 建立分布式应用程序的强大支柱。
RMI 允许一个应用程序访问另外一个服务器或虚拟机上的对象,方法和服务,它使远程方法调用就像在本地调用一样简单。它为用户屏蔽了底层的网络传输细节,使用的时候只需适当处理异常即可。所以 RMI 是非常容易使用的,但同时是非常强大的。
RMI 协议的数据序列化目前支持以下两种模式:
1.基于 JDK 本身的对象序列化
2.基于 HTTP 协议的数据序列化
协议数据序列化原文说明如下:
The RMI protocol makes use of two other protocols for its on-the-wire format: Java Object Serialization and HTTP. The Object Serialization protocol is used to marshal call and return data. The HTTP protocol is used to "POST" a remote method invocation and obtain return data when circumstances warrant. Each protocol is documented as a separate grammar. Nonterminal symbols in production rules may refer to rules governed by another protocol (either Object Serialization or HTTP). When a protocol boundary is crossed, subsequent productions use that embedded protocol.
数据传输数据包一共分两种,一种是数据输出流,另一种是数据输入流。
输出流与输入流都是成对出现和使用。
输出流数据包格式
输出流数据包的内容说明如下:
◦Header 头
◦Messages 消息体
◦HttpMessage(可选)
Header:头数据包说明
0x4a 0x52 0x4d 0x49 Version Protocol
Header 包含四个固定字节的标识加版本号,协议信息构成
Version 数据包说明(两个字节)
0x00 0x01
Protocol 协议(一个字节),一共分三种 StreamProtocol、SingleOpProtocol 和 MultiplexProtocol。
分别对应的值如下:
◦StreamProtocol:0x4b
◦SingleOpProtocol:0x4c
◦MultiplexProtocol:0x4d
Messages:数据包说明
针对 Message 的消息体,由与上面的 Protocal 协议类型指定相关。
如果是 SingleOpProtocol 则消息体只包含一条消息。一般用于 HTTP 方式请求。
The Messages are wrapped within a particular protocol as specified by Protocol. For the SingleOpProtocol, there may only be one Message after the Header, and there is no additional data that the Message is wrapped in. The SingleOpProtocol is used for invocation embedded in HTTP requests, where interaction beyond a single request and response is not possible.
SingleOpProtocol 和 MultiplexProtocol 消息则需要服务器返回 0x4e 字节作为响应。
Message 的类型包含以下三种:
1.Call 表示 RMI 的调用操作
2.Ping 是检测服务是否运行正常
3.DgcAck 当客户端收到服务端的对象消息后告诉服务器可以把返回值对象进行 gc 操作。
Call 消息数据内容:
0x50 CallData
Ping 消息数据内容:
0x52
DgcAck 消息数据内容:
0x54 UniqueIdentifier
CallData:RMI 方法请求数据包
ObjectIdentifier Operation Hash Arguments(可选)
◦ObjectIdentifier (the target of the call)
◦Operation (a number representing the method to be invoked)
◦Hash (a number that verifies that client stub and remote object skeleton use the same stub protocol)
◦Arguments(a list of zero or more Arguments for the call)
UniqueIdentifier 数据包内容(一个字节)
Number Time Count
Arguments:Values 对象
Object
HttpMessage:数据包说明
HttpPostHeader Header Message
HttpPosteHeader 是 HTTP 标准的请求 Header
Header 头和 Message 数据包与上相同。
输入流数据包格式
输入流数据包的内容有以下三个方式:
ReturnData is the result of a "normal" RMI call
An HttpReturn is a return result from an invocation embedded in the HTTP protocol
A PingAck is the acknowledgment for a Ping message
ReturnData 数据包:
0x4e Returns
Returns 数据包,包含 ReturnData 和 PingAck。
ReturnData 数据包:
0x51 ReturnValue
PingAck 数据包:
0x53
ProtocolNotSupported 数据包:
0x4f
ReturnValue:返值数据包结构
0x01 UniqueIdentifier 返回值对象(可选)
0x02 UniqueIdentifierException 对象
Note - ObjectIdentifier, UniqueIdentifier, and EndpointIdentifier are not written out using default serialization, but each uses its own special write method (this is not the writeObject method used by object serialization); the write method for each type of identifier adds its component data consecutively to the output stream.
在使用 RMI 发布服务时,会使用到两个端口。
一个是 RegisterPort,这个是 RMI 的服务注册端口,通过以下 API 来指定。而且服务注册端口必须要指定,默认使用 1099 端口。
Registry reg = LocateRegistry.getRegistry(registryPort);
注册端口是客户端服务连接的端口。
一个是 ServicePort,这个是 RMI 的服务的数据传输端口。该端口是真正在 RMI 客户端与服务端进行数据通信交互的端口。是由注册端口发现有客户端连接后,进行后续分配的端口。默认值为 0 表示使用匿名随机端口。
API 的指定方式如下:
UnicastRemoteObject.exportObject(this.exportedObject, this.servicePort);
RMI 允许一个应用程序访问另外一个服务器或虚拟机上的对象,方法和服务,它使远程方法调用就像在本地调用一样简单。它为用户屏蔽了底层的网络传输细节,使用的时候只需适当处理异常即可。所以 RMI 是非常容易使用的,但同时是非常强大的。
RMI 协议的数据序列化目前支持以下两种模式:
1.基于 JDK 本身的对象序列化
2.基于 HTTP 协议的数据序列化
协议数据序列化原文说明如下:
The RMI protocol makes use of two other protocols for its on-the-wire format: Java Object Serialization and HTTP. The Object Serialization protocol is used to marshal call and return data. The HTTP protocol is used to "POST" a remote method invocation and obtain return data when circumstances warrant. Each protocol is documented as a separate grammar. Nonterminal symbols in production rules may refer to rules governed by another protocol (either Object Serialization or HTTP). When a protocol boundary is crossed, subsequent productions use that embedded protocol.
引用
数据传输数据包一共分两种,一种是数据输出流,另一种是数据输入流。
输出流与输入流都是成对出现和使用。
输出流数据包格式
输出流数据包的内容说明如下:
◦Header 头
◦Messages 消息体
◦HttpMessage(可选)
Header:头数据包说明
0x4a 0x52 0x4d 0x49 Version Protocol
Header 包含四个固定字节的标识加版本号,协议信息构成
Version 数据包说明(两个字节)
0x00 0x01
Protocol 协议(一个字节),一共分三种 StreamProtocol、SingleOpProtocol 和 MultiplexProtocol。
分别对应的值如下:
◦StreamProtocol:0x4b
◦SingleOpProtocol:0x4c
◦MultiplexProtocol:0x4d
Messages:数据包说明
针对 Message 的消息体,由与上面的 Protocal 协议类型指定相关。
如果是 SingleOpProtocol 则消息体只包含一条消息。一般用于 HTTP 方式请求。
The Messages are wrapped within a particular protocol as specified by Protocol. For the SingleOpProtocol, there may only be one Message after the Header, and there is no additional data that the Message is wrapped in. The SingleOpProtocol is used for invocation embedded in HTTP requests, where interaction beyond a single request and response is not possible.
SingleOpProtocol 和 MultiplexProtocol 消息则需要服务器返回 0x4e 字节作为响应。
Message 的类型包含以下三种:
1.Call 表示 RMI 的调用操作
2.Ping 是检测服务是否运行正常
3.DgcAck 当客户端收到服务端的对象消息后告诉服务器可以把返回值对象进行 gc 操作。
Call 消息数据内容:
0x50 CallData
Ping 消息数据内容:
0x52
DgcAck 消息数据内容:
0x54 UniqueIdentifier
CallData:RMI 方法请求数据包
ObjectIdentifier Operation Hash Arguments(可选)
◦ObjectIdentifier (the target of the call)
◦Operation (a number representing the method to be invoked)
◦Hash (a number that verifies that client stub and remote object skeleton use the same stub protocol)
◦Arguments(a list of zero or more Arguments for the call)
UniqueIdentifier 数据包内容(一个字节)
Number Time Count
Arguments:Values 对象
Object
HttpMessage:数据包说明
HttpPostHeader Header Message
HttpPosteHeader 是 HTTP 标准的请求 Header
Header 头和 Message 数据包与上相同。
输入流数据包格式
输入流数据包的内容有以下三个方式:
ReturnData is the result of a "normal" RMI call
An HttpReturn is a return result from an invocation embedded in the HTTP protocol
A PingAck is the acknowledgment for a Ping message
ReturnData 数据包:
0x4e Returns
Returns 数据包,包含 ReturnData 和 PingAck。
ReturnData 数据包:
0x51 ReturnValue
PingAck 数据包:
0x53
ProtocolNotSupported 数据包:
0x4f
ReturnValue:返值数据包结构
0x01 UniqueIdentifier 返回值对象(可选)
0x02 UniqueIdentifierException 对象
Note - ObjectIdentifier, UniqueIdentifier, and EndpointIdentifier are not written out using default serialization, but each uses its own special write method (this is not the writeObject method used by object serialization); the write method for each type of identifier adds its component data consecutively to the output stream.
在使用 RMI 发布服务时,会使用到两个端口。
一个是 RegisterPort,这个是 RMI 的服务注册端口,通过以下 API 来指定。而且服务注册端口必须要指定,默认使用 1099 端口。
Registry reg = LocateRegistry.getRegistry(registryPort);
注册端口是客户端服务连接的端口。
一个是 ServicePort,这个是 RMI 的服务的数据传输端口。该端口是真正在 RMI 客户端与服务端进行数据通信交互的端口。是由注册端口发现有客户端连接后,进行后续分配的端口。默认值为 0 表示使用匿名随机端口。
API 的指定方式如下:
UnicastRemoteObject.exportObject(this.exportedObject, this.servicePort);
发表评论
-
WebService 与 RMI 的区别
2016-10-18 13:36 388引用 Web Service提供的服 ... -
深入理解rmi原理
2016-10-17 14:41 445深入理解rmi原理 http://www.jianshu.c ... -
RMI 例子
2016-10-17 13:55 493package com.danny.rim; imp ... -
rmi 的hello world 例子
2016-05-25 12:58 575http://cache.baiducontent.com/c ... -
rmi 文章
2016-05-25 12:48 422http://www.cnblogs.com/end/arch ...
相关推荐
本文将深入剖析该系统的架构设计、关键技术及其实际应用,旨在为相关领域的研究者提供参考资料。 一、系统架构 Java CS架构是一种经典的网络应用模式,由客户端和服务器两部分组成。在远程监控系统中,客户端通常...
Java客户端实现Kafka生产者与消费者实例 kafka的副本机制及选举原理剖析 基于kafka实现应用日志实时上报统计分析 RabbitMQ 初步认识RabbitMQ及高可用集群部署 详解RabbitMQ消息分发机制及主题消息分发 ...
4. **【Java】一线互联网网站架构技术难点详解.mp4**:这个视频可能详细剖析了互联网公司如何使用Java来构建复杂、高流量的网站。内容可能涵盖缓存策略、数据库优化、异步处理、容错机制等方面。 5. **【Java高级】...
作者通过源代码的阅读,剖析了Spring框架的设计原理和内部架构,带领读者深入理解Spring各个组件是如何协同工作,以及其设计决策背后的原因。这样的分析对于Java开发者深入掌握Spring框架有着极大的帮助,尤其是在...
通过对RMI原理的理解,我们可以更深入地认识到EJB的工作机制。EJB作为Java EE的核心组成部分之一,其设计目的是为了简化企业级应用的开发过程。EJB利用了RMI的技术,通过容器管理的方式,为开发者提供了高度抽象的...
《深入Java虚拟机第二版》是一本深受Java开发者喜爱的经典著作,它详尽地剖析了Java虚拟机(JVM)的工作原理,为程序员提供了深入了解Java平台核心机制的宝贵资料。这本书以其清晰的版面和精心设计的书签,极大地...
RMI是Java中实现分布式计算的重要技术,但同时也可能成为攻击者的目标。《04.RMI篇(1).pdf》、《05.RMI篇(2).pdf》和《06.RMI篇(3).pdf》揭示了RMI的安全隐患,如远程代码执行、服务拒绝攻击等,并提供了相应的防范...
本篇文章将聚焦于JDK10的源码,通过对源代码的深入剖析,揭示其背后的运行机制与设计理念。 首先,我们关注到的是`java.base`模块,它是Java平台标准版(Java SE)的核心部分,包含了基础的API,如数学运算、字符串...
- **Kafka实现原理剖析**:深入理解Kafka的设计原理。 **7.7 分布式缓存分析对比** - **Memcache的原理分析及使用**:比较Memcache和Redis的不同之处。 **7.9 高并发专题-数据库层面优化** - **分库分表的原理及...
【Dubbo协议模块源码剖析1】这节课主要讲解了RPC协议的基本组成和Dubbo框架中支持的多种RPC协议的实现细节。RPC(Remote Procedure Call)协议是分布式系统中实现远程方法调用的关键技术,它涉及到服务发现、负载...
《深入剖析Dubbo源码系列》 Dubbo作为国内最广泛使用的分布式服务框架,其设计思想和实现机制对于理解和构建自己的分布式服务框架至关重要。本文将基于当当网维护的dubbox版本,逐步解析Dubbo的核心模块,以帮助...
在Dubbo源码分析系列中,知秋整理了Dubbo架构设计和源码风格的详细解读,并对核心模块的职责和关系进行了深入的剖析。这对于想要了解和掌握Dubbo源码的开发者来说,是一份宝贵的资料。通过源码分析,开发者不仅能够...
《Dubbo面试专题》这本书是Java工程师们在面试过程中不可多得的参考资料,它深入剖析了Dubbo这一著名中间件的各项核心技术和应用实践。Dubbo作为阿里巴巴开源的高性能、轻量级的服务框架,广泛应用于微服务架构中,...
《深入剖析Dubbo 2.5.5源码》 Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java服务框架,它致力于提供一个简单、高效且可扩展的服务调用解决方案。本文将围绕Dubbo 2.5.5版本的源码进行详细解读,帮助开发者深入...
- **Java反射技术**:探讨Java反射机制的基本原理及其应用场景,了解Class类、Field类、Method类和Constructor类的使用。 - **实战设计模式**:详细介绍常见的设计模式,如单例模式、工厂模式、观察者模式等,并通过...
《深入剖析Dubbo源码:探索分布式服务框架的奥秘》 Dubbo,这款由阿里巴巴开源的高性能Java RPC框架,自2008年诞生以来,已经在业界得到了广泛应用。其核心设计目标是轻量级、高性能、透明化的远程调用方案,以及...
《深入剖析Dubbo 2.5.6源码》 Dubbo是一款由阿里巴巴开源的高性能、轻量级的服务治理框架,它主要应用于分布式系统中的服务调用与治理。本资料聚焦于Dubbo 2.5.6版本的源码解析,帮助开发者深入了解其内部工作机制...
《深入剖析Dubbo 2.5.6源码》 Dubbo是一款高性能、轻量级的开源Java RPC框架,由阿里巴巴公司开发并贡献给社区。它致力于提供一套完整的服务治理解决方案,包括服务注册、服务发现、负载均衡、容错机制等。在本文中...