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

Burlap中hessian协议研究(一)

阅读更多

  最近,闲的无聊,研究一些开源组件的源代码提高的自己的水平!!

  以下时你必须知道的原理知识??

  仅供参考使用,如有问题请联系我??

Burlap也是有caucho提供,它和hessian的不同在于,它是基于XML-RPC协议的。

是基于什么协议实现的?

基于XML-RPC协议实现。

怎么发起请求?

根据Burlap提供的API

怎么将请求转化为符合协议的格式的?

将请求信息转化为符合协议的XML格式,转化为流进行传输。

使用什么传输协议传输?

Http协议。

响应端基于什么机制来接收请求?

监听Http请求。

怎么将流还原为传输格式的?

根据XML-RPC协议进行还原。

处理完毕后怎么回应?

返回结果写入XML中,由Burlap返回至调用端。

 

 

关于Burlap的请求信息的DTD文件如下:

 

DTD文件描述:

burlap协议定义格式

SML grammar

tag-list ::= (S tag)* S

tag      ::= <name> tag-list </name>
         ::= <name> cdata </name>

S        ::= (' ' | '\t' | '\r' | '\n')*

cdata    ::= ([^<&] | &# [0-9]+ ; | &lt; | &gt; | &amp;)*
name     ::= [a-zA-Z:_] [a-zA-Z0-9.-_:]*

burlap:call

        
<!DOCTYPE burlap:call>

<!ENTITY % object "null | boolean | int | double | string | xml |
                 base64 | date | ref | map | list | remote">
                        
<!ENTITY % header "(header, (%object;))*">

<!ELEMENT burlap:call - - ((%header;), method, (%object;)*)>

<!ELEMENT header - - #CDATA>

<!ELEMENT method - - #CDATA>

<!ELEMENT null - - EMPTY>
<!ELEMENT boolean - - #CDATA>
<!ELEMENT int - - #CDATA>
<!ELEMENT double - - #CDATA>
<!ELEMENT string - - #CDATA>
<!ELEMENT xml - - #CDATA>
<!ELEMENT base64 - - #CDATA>
<!ELEMENT date - - #CDATA>

<!ELEMENT ref - - #CDATA>
<!ELEMENT map - - (type, ((%object;), (%object;))*)>
<!ELEMENT list - - (type, length, (%object;)*)>
<!ELEMENT type - - #CDATA>

<!ELEMENT remote - - (type, string)>

burlap:reply

        
<!DOCTYPE burlap:reply>

<!ENTITY % object "(null | boolean | int | double | string | xml |
                 base64 | date | ref | map | list | remote)">
                        
<!ENTITY % header "(header, (%object;))*">

<!ELEMENT burlap:reply - - ((%header;), (%object; | fault))>

<!ELEMENT header - - #CDATA>

<!ELEMENT fault - - (string, (%object;))*>

<!ELEMENT null - - EMPTY>
<!ELEMENT boolean - - #CDATA>
<!ELEMENT int - - #CDATA>
<!ELEMENT double - - #CDATA>
<!ELEMENT string - - #CDATA>
<!ELEMENT xml - - #CDATA>
<!ELEMENT base64 - - #CDATA>
<!ELEMENT date - - #CDATA>

<!ELEMENT ref - - #CDATA>
<!ELEMENT map - - (type, ((%object;), (%object;))*)>
<!ELEMENT list - - (type, length, (%object;)*)>
<!ELEMENT type - - #CDATA>

<!ELEMENT remote - - (type, string)>

 

 

关于Burlap请求的信息格式

如下:

 

 

Burlap的格式类似如下:

burlap内容如下:
<burlap:call>
<method>setAdDetail</method>
<map>
<type>com.netease.bid.client.model.Ad</type>
<string>id</string><long>-888</long>
<string>title</string><string>888</string>
<string>desc1</string><string>888</string>
<string>desc2</string><string>888</string>
<string>url</string><string>
http://www.888.com</string>
<string>dispUrl</string><string>http://www.888.com</string>
<string>area</string><string>1</string>
<string>areas</string><list><length>2</length><int>16</int><int>27</int></list>
<string>appearTime</string><int>1</int>
<string>disappTime</string><int>12</int>
<string>dayBudget</string><string>16</string>
<string>keywords</string><map><type></type>
<long>-58810201</long>
<map>
<type>com.netease.bid.client.model.Keyword</type>
<string>id</string><long>-58810201</long>
<string>name</string><string>
原始关键词8</string>
<string>status</string><int>0</int>
<string>mode</string><int>0</int>
<string>clickCost</string>
<map>
<type>java.math.BigDecimal</type><string>value</string><string>10</string>
</map>
<string>topPrice</string><string>0.3</string>
</map>
<long>-52610072</long>
<map>
<type>com.netease.bid.client.model.Keyword</type>
<string>id</string><long>-52610072</long>
<string>name</string><string>
原始关键词
88</string>
<string>status</string><int>0</int>
<string>mode</string><int>0</int>
<string>clickCost</string>
<map>
<type>java.math.BigDecimal</type><string>value</string><string>11</string>
</map>
<string>topPrice</string><string>0.3</string>
</map>
<long>-79731473</long>
<map>
<type>com.netease.bid.client.model.Keyword</type>
<string>id</string><long>-79731473</long>
<string>name</string><string>
原始关键词
888</string><string>status</string><int>0</int>
<string>mode</string><int>0</int>
<string>clickCost</string>
<map>
<type>java.math.BigDecimal</type><string>value</string><string>12</string>
</map><string>topPrice</string><string>0.3</string>
</map></map>
<string>status</string><int>1</int>
</map>
</burlap:call>

 

 

生成此xml的类为MicroBurlapInputStream类

 

 

请看源代码如下:

 

请看下一节??

  \(^o^)/\(^o^)/

 

 

 

分享到:
评论
2 楼 gq2010 2015-08-04  
在caucho的官网上怎么找不到Burlap的下载地址啊?
1 楼 longgangbai 2009-03-13  
如果大家针对Burlap有兴趣,不妨把我写的这篇看完之后写一个小的远程服务框架,挑战、挑战自己^_^!!!欢迎大家参与我的论坛评论!!谢谢!

相关推荐

    burlap-spring-demo

    Burlap是一个轻量级的XML RPC协议 这使得他可以移植到任何可以解析XML的语言中 比起Hessian 它的可读性更强 和其他基于Xml的远程技术(如SOAP和XML RPC)不同 它的消息结构尽可能简单 不需要额外的外部定义语言 如...

    闲着没事Hessian开发WebService的总结(一)

    从压缩包子文件的文件名称“BurlapWS”来看,这可能是与Burlap相关的,Burlap是Hessian的一个变种,也是一个轻量级的RPC协议。它使用XML而非Hessian的二进制格式进行序列化,可能在某些场景下更便于跨平台交互。...

    hessian java +c# 数据测试

    "HessianDemo"可能是整个示例的主程序或者测试用例,包含了Hessian协议的完整流程,包括服务器启动、客户端连接、数据交换等步骤。 总之,Hessian为Java和C#之间的跨平台通信提供了便利,通过高效的数据序列化和反...

    Hessian 接口 Java Python.docx

    Hessian是一种小型的二进制协议,它专注于数据的高效传输,而Burlap则是一种匹配的XML协议,提供了一种相对更易于阅读和解析的格式。 在Java和Python之间实现接口时,Hessian起着关键作用。通过使用Hessian,开发者...

    hessian 实例

    远程调用方法就是HttpInvoker:他也是将参数和返回值通过Java的序列化机制进行编组和反编组,它具有RMI的支持所有可序列化对象的...试使用Http协议传输二进制流的,同时又具有Hessian、Burlap(传输xml文本)的优点。

    Java远程通讯可选技术及原理.docx

    本文主要探讨了Java领域中常见的几种远程通讯技术,包括RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等。这些技术各有特点,适用于不同的场景。 **RMI(Remote Method Invocation)** RMI是Java平台特有的一种...

    Java远程通讯可选技术及原理

    Hessian和Burlap是二进制和文本的RPC协议,它们提供了轻量级的远程调用解决方案,适合对性能要求较高的场景。 JMS(Java Message Service)是Java平台的消息队列标准,它允许应用程序之间异步发送和接收消息,适用...

    基于Spring的远程访问与Web Service

    Spring通过`HessianProxyFactoryBean`和`HessianServiceExporter`提供对Hessian的支持,允许服务以Hessian协议暴露,并能被其他Hessian客户端调用。 ### 4. Burlap Burlap是另一种轻量级的RPC协议,与Hessian类似...

    Netty之序列化协议

    4. **Hessian和Burlap**:是Apache的Caucho项目提供的二进制RPC协议,它们提供了一种轻量级的序列化方式,适合于内部服务间的通信,尤其是跨语言通信。 在Netty中实现序列化,通常需要自定义`MessageToByteEncoder`...

    simple-parent

    2. ** Burlap**:与Hessian类似,Burlap也是一种RPC协议,但它使用XML进行序列化,因此具有更好的可读性,但可能会牺牲一些性能。 3. **Web Services (SOAP/WSDL)**:这种基于标准的远程调用方式提供了高度的互操作...

    远程调用的几种方式.pdf

    Java领域中有多种实现远程通讯的技术,如RMI(Remote Method Invocation)、MINA(Multi-purpose Infrastructure for Network Applications)、ESB(Enterprise Service Bus)、Burlap、Hessian、SOAP(Simple ...

    spring依赖包讲解.doc

    Caucho的Burlap和Hessian库(burlap-2.1.12.jar和hessian-2.1.12.jar)提供了两种轻量级的远程调用协议,Spring支持它们以实现跨网络通信。 CGLIB(cglib-full-2.0.2.jar)是另一个重要的依赖,它用于生成动态代理...

    Java远程技术.pdf

    - Hessian和Burlap:基于HTTP协议的远程通信技术,用于序列化Java对象。 - EJB(Enterprise JavaBeans):一种用于开发企业级应用的Java组件架构,支持远程通信。 6. 网络协议与Java远程通信的关系: - TCP/UDP...

    dwr中文教程~转载的,共享一下

    2. **Caucho Hessian/Burlap**:DWR可以使用Hessian或Burlap作为传输协议,它们是轻量级的二进制/文本序列化协议,提高了数据传输效率。 三、DWR的工作流程 1. **配置**:在Web应用程序的配置文件中,如web.xml,...

    org.jflux.impl.transport.qpid-0.1.4.zip

    1. **Spring Remoting**: Spring Remoting是Spring框架的一部分,它提供了一种声明式的远程调用方式,支持RMI、HTTP、Hessian、 Burlap等多种协议。Spring Remoting-AMQP扩展了这一功能,增加了对AMQP的支持。 2. *...

    dwr入门学习第一课范例

    - **Caucho Hessian/Burlap**:DWR使用Caucho的Hessian和Burlap协议来序列化和反序列化Java对象,使得它们可以在网络上传输。 - **AutoComplete**和**Echo**:这两个是DWR提供的一些特殊服务,AutoComplete用于实现...

    spring remoting

    3. Hessian和Burlap:这两种协议是基于HTTP的轻量级二进制协议,它们提供了更高效的序列化机制。Hessian是二进制的,而Burlap是基于XML的,两者都提供了自动类型转换的能力,使得跨语言调用成为可能。 4. JMS(Java...

Global site tag (gtag.js) - Google Analytics