梁 兄

QQ: 160216918 QQ群: 26678700 MSN: lb_bing@hotmail.com

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  52 Posts :: 5 Stories :: 355 Comments :: 0 Trackbacks
        这几天分析一个我接手的系统,是一个典型的分布式系统。其中有特色的技术就是采用了webservice,
webservice从字面上分解就是web service----一个提供web服务的系统,可以通过web方式访问这些服务。
而从现实中,webservice可以说是一套标准:分布式,跨平台,跨语言等; 标准实现采用SOAP协议,SOAP
协议是基于流行的XML表达的,具有一个套封envlope, envlope里包含一个必须的body和一个可选的head;
就是在这个body里,我们声明了访问的方法、方法的参数或返回值。
        webservice实现, C++系统上采用开源的gSoap,而java采用apache的Axis。这两个框架都提供工具来
生成C++代码或Java代码,不管是gSoap或者Axis,他们生成的最终代码,客户端只需要调用简单的对象就
可以访问服务器,而服务器生成一样的接口,开发者实现这些接口就行,中间的通讯过程全部由框架解决了。
         其实这种技术架构并不新颖,早期的CORBA和DCOM, 后来java的RMI, 这些基本上都是RPC技术,大同
小异而已。而它们的背后设计模式,可以说就是23种模式之一的代理模式Proxy。简言之就是,一个客户不想
或者不能直接引用一个对象(接口),而代理对象(接口)可以在客户端和目标对象之间起到中介作用。
        按目的划分代理模式有8种:
        1、远程代理:为位于不同的地址空间的对象提供一个局域代表对象
        2、虚拟代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建
        3、Copy-on-Write代理:把复制拖延到只有在客户需要时才真正采取行动
        4、保护代理:控制对象的访问,提供使用权限检查
        5、Cache代理:为某个目标操作的结果提供临时的存储空间,以便多客户共享
        6、防火墙代理:保护目标,防止恶意用户
        7、同步化代理:能同时访问对象而没有冲突
        8、智能引用代理:提供一些额外操作,如访问次数统计
        显然RPC方式属于第1种远程代理模式。
        可以看出,在面对一种技术时,我们从它的定义、实现、引入目的、类似相关技术、背后理论基础来
细细分析,就比较容易掌握了。
posted on 2007-12-08 14:37 梁-兄 阅读(916) 评论(4)  编辑 收藏 引用 所属分类: 设计模式

Feedback

# re: 代理模式与webservice实现 2007-12-08 23:18 天下无双
gSoap开发是不是很繁琐,以前也想写一个,看了一阵又用不上了。  回复  更多评论
  

# re: 代理模式与webservice实现 2007-12-09 09:45 梁-兄
gSoap开发比Axis开发并不麻烦,但方式有所不同: Axis开发是一般我们用xml工具定义好接口的wsdl文件,然后用Axis的工具wsdl2java就自动生成客户端和服务器代码了;而gSoap开发是先定义一个头文件xxxx.h, 在头文件里说明你提供服务的接口,如果有必要自定义类型的话,就定义特有的自定义的struct结构类型等,然后使用gSoap提供的工具根据你提供的头文件来生成相应的客户端和服务器代码,一定要理解清楚它调用路径,不然确实使人迷惑而不想用,这些C++方面的风格真的很难看,这一点远远比不上Axis开发。这些开源框架的使用,一定要静下心来看他们提供的英文使用文档,里面有使用的例子。  回复  更多评论
  

# re: 代理模式与webservice实现 2007-12-10 09:16 梦在天涯
o ,还是.net写这个容易哦1  回复  更多评论
  

# re: 代理模式与webservice实现 2007-12-11 00:50 DeathKnight
Dotnet hides all the implementation details. Though it's so easy to write a web services program on it you should find some more materials about essentials of the web services technology if you wanna be a good programmer.  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]