Size: 3238
Comment:
|
Size: 4844
Comment: Burlap协议的Python实现
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
'''PyBurlap一个Burlap协议的Python实现''' | '''PyBurlap--Burlap协议的Python实现''' = 缘起 = |
Line 4: | Line 6: |
== 目前版本以及实现的功能 == version:0.1 可以完成对string,int,long,double,list,map,base64,boolean,date,null这些数据类型进行交换 尚未实现的数据类型:xml == 有关Burlap协议 == http://www.caucho.com/resin-3.0/protocols/burlap.xtp == PyBurlap调用方法 == 代码足以说明一切使用方法了 {{{ if __name__ == "__main__": proxy = Burlap("http://localhost:8080/buffalo/Hello") try: print proxy.hello("Breeze") print proxy.replyInt(10) print proxy.replyLong(10000) print proxy.replyDouble(1000000.90) print proxy.callIntStr(100,"Breeze") print proxy.replyList(['Breeze','QingFeng','Wind',100,300.68])#list print proxy.replyMap({'Breeze':1,'QingFeng':2,'Wind':3,100:4,300.68:5})#map->Python is dict print proxy.replyBoolean(True) #ISO_8609_DATETIME = '%Y%m%dT%H%M%SZ' print proxy.replyDate(Date('20050501T095231Z')) import base64 print proxy.replyBase64(base64.encodestring('Breeze Base64')) except Error, v: print "ERROR", v }}} == xmlrpc以及burlap这些东东的基本原理 == 其实就是Http协议的POST操作,废话不多说,代码如下: {{{ import httplib str = "<burlap:call>" str += " <method>hello</method>" str += " <string>China</string>" str += "</burlap:call>" http = httplib.HTTP('localhost:8080') http.putrequest('POST','/buffalo/Hello') http.putheader('User-Agent','PyBurlap by Wind') http.putheader('Host','localhost:8080') http.putheader("Content-Type", "text/xml") http.endheaders() http.send(str) errcode, errmsg, headers = http.getreply() print errcode print http.getfile().read() }}} == 用Java实现的Burlap协议操作 == |
|
Line 64: | Line 133: |
OK,Burlap整个环境流程搭建测试完毕,接下来就是封装我们的PyBurlap了:) | |
Line 66: | Line 134: |
P.S:有关Burlap协议的Specification http://www.caucho.com/resin-3.0/protocols/burlap-1.0-spec.xtp 目前版本0.1a,已经完成了string的传参与接收,实现了<burlap:call>和<burlap:reply>的发送与接收 调用方法如下: |
PyBurlap调用方法如下: |
Line 75: | Line 137: |
print proxy.hello("Wind")#调用远程方法hello(str) | print proxy.hello("Breeze")#调用远程方法hello(str) |
Line 78: | Line 140: |
调用后,成功返回Hello Wind | 调用后,成功返回Hello Breeze == 关于作者 == 清风(Breeze)--写程序不仅仅只是工作,在我看来他更是一种生活方式 Blog:http://blog.csdn.net/changzheng E-mail:paradise.qingfeng AT gmail.com |
Line 81: | Line 152: |
* Burlap是一种类似xmlrpc的技术,只是比xmlrpc更为简洁。这篇文章还不够规范,等完全开发完成以后,也会按照模板的格式详细写出的::) P.S Burlap规范 http://www.caucho.com/resin-3.0/protocols/burlap-1.0-spec.xtp -- Wind | * Burlap是一种类似xmlrpc的技术,只是比xmlrpc更为简洁。这篇文章还不够规范,等完全开发完成以后,也会按照模板的格式详细写出的::) P.S Burlap规范 http://www.caucho.com/resin-3.0/protocols/burlap-1.0-spec.xtp -- 清风(Breeze) |
PyBurlap--Burlap协议的Python实现
缘起
目前版本以及实现的功能
version:0.1
可以完成对string,int,long,double,list,map,base64,boolean,date,null这些数据类型进行交换
尚未实现的数据类型:xml
有关Burlap协议
http://www.caucho.com/resin-3.0/protocols/burlap.xtp
PyBurlap调用方法
代码足以说明一切使用方法了
if __name__ == "__main__": proxy = Burlap("http://localhost:8080/buffalo/Hello") try: print proxy.hello("Breeze") print proxy.replyInt(10) print proxy.replyLong(10000) print proxy.replyDouble(1000000.90) print proxy.callIntStr(100,"Breeze") print proxy.replyList(['Breeze','QingFeng','Wind',100,300.68])#list print proxy.replyMap({'Breeze':1,'QingFeng':2,'Wind':3,100:4,300.68:5})#map->Python is dict print proxy.replyBoolean(True) #ISO_8609_DATETIME = '%Y%m%dT%H%M%SZ' print proxy.replyDate(Date('20050501T095231Z')) import base64 print proxy.replyBase64(base64.encodestring('Breeze Base64')) except Error, v: print "ERROR", v
xmlrpc以及burlap这些东东的基本原理
其实就是Http协议的POST操作,废话不多说,代码如下:
import httplib str = "<burlap:call>" str += " <method>hello</method>" str += " <string>China</string>" str += "</burlap:call>" http = httplib.HTTP('localhost:8080') http.putrequest('POST','/buffalo/Hello') http.putheader('User-Agent','PyBurlap by Wind') http.putheader('Host','localhost:8080') http.putheader("Content-Type", "text/xml") http.endheaders() http.send(str) errcode, errmsg, headers = http.getreply() print errcode print http.getfile().read()
用Java实现的Burlap协议操作
OK,开始第一步,搭建环境 打开尘封以久的Eclipse,建立Burlap的服务器端环境,首先写一个简单的接口IHello
public interface IHello { public abstract String hello(); }
然后是他的实现
public class HelloService extends BurlapServlet implements IHello { public String hello() { System.out.println("Hello"); return "Hello World!"; } }
把HelloService当作一个普通的Servlet配置一下,然后把Tomcat跑起来
客户端调用
public class Client { public static void main(String[] args) { String url = "http://localhost:8080/buffalo/Hello";; BurlapProxyFactory factory = new BurlapProxyFactory(); IHello basic = null; try { basic = (IHello) factory.create(IHello.class, url); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("now(): " + basic.hello()); } }
以上的代码基本也就是按照Burlap的文档删删改改。 调用后效果如下: 此主题相关图片
http://www.faridea.com/bbs/images/upload/2005/04/21/233055.gif
OK,现在我们尝试在Python中调用这个HelloService,也不用开什么特定的编辑器,只要打开Python的脚本环境即可,然后输入如下命令。 此主题相关图片
http://www.faridea.com/bbs/images/upload/2005/04/21/233125.gif
我们看到在http.getfile.read()之后得到了正确的反馈: '<burlap:reply><string>Hello World!</string></burlap:reply>'
PyBurlap调用方法如下:
proxy = Burlap("http://localhost:8080/buffalo/Hello")#burlap服务的地址 print proxy.hello("Breeze")#调用远程方法hello(str)
调用后,成功返回Hello Breeze
关于作者
清风(Breeze)--写程序不仅仅只是工作,在我看来他更是一种生活方式
Blog:http://blog.csdn.net/changzheng
E-mail:paradise.qingfeng AT gmail.com
反馈
Great!!如此easy 的快速实现想法正是PythonIc 精神!不过,可以扫盲一下子?什么是 Burlap?为什么会有此技术诞生? -- ZoomQuiet
Burlap是一种类似xmlrpc的技术,只是比xmlrpc更为简洁。这篇文章还不够规范,等完全开发完成以后,也会按照模板的格式详细写出的::) P.S Burlap规范 http://www.caucho.com/resin-3.0/protocols/burlap-1.0-spec.xtp -- 清风(Breeze)