JAVA开发中几种通讯模式
来源:互联网 发布:云数据库怎么用 编辑:程序博客网 时间:2024/06/05 13:26
对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现
Web Service
Corba
RMI:是Java语言的远程调用,两端的程序语言必须是Java实现
Spring自己的HTTP invoker
EJB
一个关于RMI的简单介绍
http://www.cnblogs.com/ninahan0419/archive/2009/06/25/javarmi.html
在JDK 1.5后使用RMI不在需要生成sub和skelton对象了, 这两个对象会在运行时动态生成
http://www.iteye.com/topic/161485
http://blog.163.com/hero_213/blog/static/39891214200931841559963/
SOCKET使用时可以指定协议TCP,UDP等;
RIM使用JRMP协议,JRMP又是基于TCP/IP;
RPC底层使用SOCKET接口,定义了一套远程调用方法;
HTTP是建立在TCP上,不是使用SOCKET接口,需要连接方主动发数据给服务器,服务器无法主动发数据个客户端;
可以用socket实现HTTP;
其实符合HTTP规范的就是HTTP协议,不管用什么技术。
hessian是一套用于建立web service的简单的二进制协议,用于替代基于XML的web service,是建立在rpc上的,hessian有一套自己的序列化格式将数据序列化成流,然后通过http协议发送给服务器,看源码发现其实是使用
HttpURLConnection和servlet建立连接,然后发送流
hessian
http://hessian.caucho.com
RIM和SOCKET比较,见下文
http://www.cppblog.com/sherrylso/archive/2007/07/28/28906.html, 简单的说,RMI允许JAVA对象跨越不同的虚拟机和地址空间,借助于对象序列化的技术可以使JAVA对象在不同的虚拟机上进行传递。RMI为JAVA的分布式计算平台提供了简单而直接的模型,将跨平台特性和可移植性带入到分布式计算平台中。而SOCKET是消息驱动逻辑,在Client和Server端都有一个消息分发器,这样的模式决定了编程不会像RMI那样面向对象。两者的区别于四点:(1)RMI面向对象,SOCKET不是(2)RMI的客户端和服务端都必须使用JAVA开发,而SOCKET独立于开发语言,服务端和客户端可以使用不同的开发语言(3)从网络协议栈角度,Socket基于TCP协议上,而RMI在TCP协议上又加上了自己的应用协议(4)从性能上来说,在网络上传输2b的有效数据,TCP有478b的数据被额外传输,而RMI有1645b被额外传输,这点也是最重要的,因为性能决定了采用哪种技术,由此可知,如果Client和Server之间要传输大量的数据,则不应使用RMI。
RMI和RPC差别
http://blog.csdn.net/zhigangsun/article/details/5892591
http和socket差别
http://sw1982.iteye.com/blog/460406
REST 代表性状态传输
http://www.ibm.com/developerworks/cn/webservices/ws-restful/index.html
http://www.iteye.com/topic/1111647
REST描述语言 WADL
SOAP 简单对象访问协议
描述语言WSDL
http://www.cnblogs.com/tianzhiliang/archive/2010/10/28/1863684.html
Web Service基本概念
Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。
Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。
UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。
SOA:
SOA面向服务的体系结构(service-oriented architecture,SOA)是一个系统软件组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。
WSDL,UDDI和SOAP是SOA基础的基础部件。WSDL用来描述服务;UDDI用来注册和查找服务;而SOAP,作为传输层,用来在消费者和服务提供者之间传送消息。SOAP是Web服务的默认机制,其他的技术为可以服务实现其他类型的绑定。一个消费者可以在UDDI注册表(registry)查找服务,取得服务的WSDL描述,然后通过SOAP来调用服务。
- 分布式架构 协议 调用方式
- -------------------------------------------------------
- Corba架构 专有二进制协议 对象的CRUD操作
- EJB架构 专有二进制协议 对象的CRUD操作
- Web Services SOAP协议 RPC方式
- REST HTTP协议 对资源的CRUD操作
- --------------------------------------------------------
REST的优点
- 可以利用缓存Cache来提高响应速度
- 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
- 浏览器即可作为客户端,简化软件需求
- 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
- 不需要额外的资源发现机制
- 在软件技术演进中的长期的兼容性更好
Rest本身的内容比我想象的多的多,大致列出来几个关键点如下:
1.满足以下的Constraints:
- Client–server
- Stateless
- Cacheable
- Layered system
- Code on demand (optional)
- Uniform interface
2.设计接口时候的原则
- Identification of resources
- Manipulation of resources through these representations
- Self-descriptive messages
- Hypermedia as the engine of application state
3.Rest希望实现的目标
- Scalability of component interactions
- Generality of interfaces
- Independent deployment of components
- Intermediary components to reduce latency, enforce security and encapsulate legacy systems
4.Rest对于我们来说
Every Resouce has a ID.
We Can Use Http Meothod(Get/Post/Put/Delete) Handle Resource.
CORBA使用一种接口描述语言(Interface description language)用于刻画对象将呈现出来的接口。CORBA又规定了从IDL到特定编程语言,如C++或Java,实现的映射。
GIOP 是用于ORB间数据传输的抽象协议,通用 ORB 间协议 (GIOP) 用来为这个由不同计算机及其各种体系结构组成的世界中传送消息定义结构和格式。如果使用 GIOP 的结构和格式,并将它们应用于 TCP/IP,那么就得到 IIOP。
使用Corba的好处
- 与具体编程语言无关
- Java and C++, C-only, SmallTalk, Perl, Ada, Ruby, and Python等语言都有CORBA的实现,并且可以跨语言互操作。
- 操作系统无关
- Linux/Unix, Windows, Sun, Mac等系统都有CORBA的实现,并且可以互操作。
- 从技术细节中解脱
- 强数据类型
- 从繁琐的数据传递中解脱
- 压缩
- CORBA的底层数据通讯机制灵活,ZIOP扩展可以将数据压缩后进行传送,而应用程序开发人员可以不懂具体压缩技术,并且不用改动绝大部分代码。
1、Get 方法通过 URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于 action 属性所指程序的 url 后,如[url]http://www.mdm.com/test.asp?name=asd&password=sad[/url],数据都会 直接显示在 url 上,就像用户点击一个链接一样;Post 方法通过 HTTP post 机制,将表单内各字段名称与其内容放置在 HTML 表头(header)内一起传送给服务器端交由 action 属性能所指的程序处理,该程序会通过标准输入(stdin)方式,将表单的数据读出并加以处理
- JAVA开发中几种通讯模式
- 利用Java进行串口通讯开发
- 容能云:云通讯PaaS服务 颠覆传统开发模式
- 我的"Java开发通讯簿系统"开发经历 ㈠
- 我的"Java开发通讯簿系统"开发经历 ㈡
- 我的"Java开发通讯簿系统"开发经历 ㈢
- 我的"Java开发通讯簿系统"开发经历 ㈣
- 我的"Java开发通讯簿系统"开发经历 ㈤
- 我的"Java开发通讯簿系统"开发经历 (六)
- 我的"Java开发通讯簿系统"开发经历 (七)
- Java——“QQ”通讯和单例模式
- Java Web开发中几种经典模式
- Java Web开发中几种经典模式
- 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。附小文:招.NET开发,结果他转JAVA了,一切都是为了生活
- Java使用开源Rxtx实现串口通讯(串口开发)
- Ubuntu 系统下java rxtx 开发串口通讯程序
- Java使用开源Rxtx实现串口通讯(串口开发)
- Java使用开源Rxtx实现串口通讯(串口开发)
- 《Core Java Volume I》学习笔记之命令行方式开发java程序
- MFC学习第四节:在窗口中输出hello world
- Effective C++读书笔记(34)
- An older version 1.1.14 of the APR based Apache Tomcat Native library is installed
- 使用SyntaxHighlighter插件对网页上的代码着色
- JAVA开发中几种通讯模式
- Hibernate学习总结
- 判断链表是否带环
- naked 使用时的注意事项。
- Hibernate学习知识总结
- Python命令行自动补全和记录历史命令
- 控制文件管理(重建、备份、恢复、增加,减少)
- GridLayout布局XML
- 如何为virtual box虚拟机增加硬盘空间[客机为xp系统]