Web远程过程调用(以下简称WebRPC)是在不刷新页面的前提下对远程方法进行调用是最近的一个热点在一些场合下他甚至成为不可替代的实现方式WebRPC的实现方式经历了从普通URL读取隐藏帧IFrame XMLHTTP乃至 Flash等本文将对目前存在的WebRpc方案(产品)进行列表并作简单评价
评价将在以下几个方面进行客户端实现方式服务器端实现方式是否自行封装协议是否支持序列化/反序列化序列化支持是否完备(原子类型对象类型)是否支持异步/同步方式注意由于Web方式的远程调用没有得到大规模运用笔者自己并没有在企业应用中采用WebRPC的经验但在娱乐应用在线游戏中已经得到了相当好的运用这些应用已经在《面向异步消息的Web应用(AMOWA)》中得到详细论述有兴趣的可以在产品指南栏目中阅读这篇文章
MSRS (Microsoft Remote Scripting)
地址?url=/library/enus/rmscpt/Html/rmscptasp
简介在网页出现的早期浏览器功能有限Applet的出现为MSRS提供了平台在这项方案中MSRS通过一个applet类以及页面上的参数配置来与服务器端交互从而实现了远程调用采用此项技术实际上将页面不刷新的工作交给了一个名为rsproxyclass的不可见Applet完成我见过早期的在线Web象棋采用此项方案优点轻而易举跨浏览器缺点服务器端采用微软asp applet加载缓慢不支持数据类型序列化/反序列化
JSRS (Javascript Remote Scripting)
地址
简介支持两种数据访问方式HTTP GET方式(动态加载JS文件)HTTP POST方式(用JS动态创建一个Iframe 在其中提交一个表单)不用刷新页面支持简单数据的序列化/反序列化
XMLRPC
地址
简介XMLRPC定义了一种协议规范由于它的轻量级概念完整因此目前绝大多数语言都有实现包括Java(Apache xmlrpc) PHP javascript VBScript python等等最大的交流方式Blog协议管理方法也遵循XMLRPC规范优点绝大多数语言都支持简单规范缺点Java实现对数据类型序列化支持有限
dwr (Direct Web Remoting)
地址
简介一个在适当时候提出适当概念的小东西采用xmlhttp传递请求服务器端利用反射找到相应方法执行后将结果返回较有创意的是他将服务器端需要进行远程调用的代码动态转换为相应的js代码前端可以直接显式调用简单可以作为WebRPC学习入门不支持数据序列化
JSONRPC
地址
简介采用一种没听说过的数据交换协议JSON(JavaScript Object Notation ) 作为协议基础在此之上进行数据调用采用xmlhttp发送/接受请求支持完整的数据序列化/反序列目前jason Web框架采用jsonrpc为底层方式
Burlap ()
简介也许会奇怪为什么Burlap也能够算得上远程协议实际上与Hessian实现方式基本相同的Burlap(前者为二进制后者为文本) 在协议完整性上能够超过上述任一产品目前我已经实现了JS调用Burlap服务的代码是目前所有远程调用方式中最为优雅的实现
XINS (XML Interface for Network Services)
地址
简介按照官方网站的说法SOA + Java + XML + code_generation complexity => XINS这个庞大的东西需要定义一揽子描述文件然后才能在HTML中进行调用从外观上看这是最像样子的解决方案对其了解不多不做评价
WebService SOAP
简介除了微软有一个webservicehtc控件mozilla也有相应的webservice访问方式因此在HTML中访问webservice也是可行的只是这种协议过于笨重除非必要没有人会在web客户端中使用
客户端实现方式
服务器端实现方式
是否自行封装协议
序列化/反序列化
同步方式/异步方式
Applet
Microsoft ASP
Iframe/动态加载js
多种php java等
XMLRPC
Xmlhttp等多种方式
绝大多数语言都有支持
XMLRPC
支持Java实现有限支持不支持自定义对象
Xmlhttp
JSONRPC
Xmlhttp
Burlap
Xmlhttp
Burlap
Xmlhttp
WebService
IE采用htc mozilla内置支持
不定遵循webservice规范以及SOAP协议
支持不同的平台上各有扩展