Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网站建设 > 网页制作 > dojo远程过程调用
【标  题】:dojo远程过程调用
【关键字】:dojo
【来  源】:http://www.cublog.cn/u/19228/showart.php?id=230140

dojo远程过程调用

Your Ad Here

远程过程调用(Remote Procedure Calls(RPC)),也称作远程方法调用( Remote Method Invocations)是客户端/服务器模式应用开发的主要技术之一。RPC允许开发者调用远程主机的方法。Dojo提供了一个基本的RPC客户端类,并且已经扩展,可以提供对JSON-RPC服务和Yahoo服务的访问。

我们假设已经拥有了一个小型的应用,希望执行服务器调用。出于简单起见,我们希望服务器执行的方法加法和减法操作,即add(x,y)和substract(x,y)。在RPC客户端,我们编写以下的代码:

add = function(x,y) {
  request = {x: x, y: y};	
  dojo.io.bind({
    url: "add.php",
    load: onAddResults,
    mimetype: "text/plain",
    content: request
  });
}

subtract = function(x,y) { request = {x: x, y: y}; dojo.io.bind({ url: "subtract", load: onSubtractResults, mimetype: "text/plain", content: request }); }

由上代码可见,实现并不是十分复杂。这仅仅是一个小型的应用。如果我们的应用不是这么简单,而是包含了30个不同的请求,将会发生什么状况?我们不得不为不同的请求一次次编写这些相同的代码;每一次获得一个请求对象,指定URL,往往还要验证参数类型等等。这种做法烦琐无聊,而且常常导致错误。

Dojo的客户端通过对应用所需的远程方法的简单定义,生成客户端函数调用这些方法,从而简化了这整个过程。开发者只需要编写定义文件,初始化RPC客户端对象,所有这些远程方法便可以供开发者正常使用。

需要编写的定义,也称为简单方法描述(Simple Method Description(SMD))文件,是一个简单的JSON字符串,定义了RPC请求将要处理的URL,这个URL可供调用的一些方法,以及这些方法所需的参数。在我们这个范例中,这个定义文件的内容如下:

{	
  "serviceType": "JSON-RPC",
  "serviceURL": "rpcProcessor.php",
  "methods":[ 
    {
      "name": "add",
      "parameters":[
        {"name": "x"},
        {"name": "y"}
      ]
    },
    {
      "name": "subtract",
      "parameters":[
        {"name": "x"},
        {"name": "y"}
      ]
    }
  ]
}

在完成描述的创建之后,代码将变得相当简单。这个定义可以以一个字符串,一个可以获取到这个定义的URL,或者是一个JavaScript对象的方式提供。

var myObject = new dojo.rpc.JsonService(definition);

以上就是客户端创建远程调用类的所有代码,剩下的工作就是对方法的调用了。

myObject.add(3,5);

当然,你可能会说:“相当漂亮,但是我还需要获取相加后的结果,而不仅仅是简单的调用”。获得结果的实现同样也很简单。我们执行了服务器的异步调用,myObject.add()调用的返回值是一个deferred对象(使用Twisted Python或MochiKit的用户对这个对象比较熟悉)。deferred对象允许开发者为结果事件附加一到多个的回调函数。我们的简单范例如下:

var myDeferred = myObject.add(3,5);
myDeferred.addCallback(myCallbackMethod);

或者是更为简单直接的方式:

var myDeferred = myObject.add(3,5).addCallback(myCallbackMethod);

由上代码可见,我们为myObject.add()返回的deferred对象附加了myCallbackMethod作为一个回调函数。在这个范例中myCallbackMethod将通过使用参数8被调用。同时,我们也可以附加错误处理的回调函数到deferred对象。我们可以附加任意个回调函数,他们将被依次调用。

 
Dojo学习笔记(9. dojo.graphics.color & dojo.uri.Uri):【上一篇】
在linux中为firefox和opera安装flash插件:【下一篇】
【相关文章】
  • Dojo学习笔记(9. dojo.graphics.color & dojo.uri.Uri)
  • 利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
  • Dojo入门(3)—事件
  • Dojo入门之(2)—Widget
  • 快速创建 Dojo Widget
  • dojo tree 代码汇总,基本上功能都全
  • dojo tree:program create tree
  • dojoTree Controller(1)
  • dojoTree Controller(2)
  • dojoTree Controller(3)
  • 【随机文章】
  • ant+javadoc生成API文档
  • c语言获取本机ip地址
  • 第一章 搭建linux下的JAVA虚拟机开发环境
  • 今天是我的第一博
  • win2000 server 加入域后如何设置用户
  • Wiki不完全手册
  • 自由软件还是Windows Server?
  • 人间四时
  • 令人瞠目结舌的硬币摆设艺术
  • finalize( ) 方法
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.