小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

dojo遠程過程調(diào)用

 tinaroad 2007-05-23

遠程過程調(diào)用(Remote Procedure Calls(RPC)),也稱作遠程方法調(diào)用( Remote Method Invocations)是客戶端/服務(wù)器模式應(yīng)用開發(fā)的主要技術(shù)之一。RPC允許開發(fā)者調(diào)用遠程主機的方法。Dojo提供了一個基本的RPC客戶端類, 并且已經(jīng)擴展,可以提供對JSON-RPC服務(wù)和Yahoo服務(wù)的訪問。

我們假設(shè)已經(jīng)擁有了一個小型的應(yīng)用,希望執(zhí)行服務(wù)器調(diào)用。出于簡單起見,我們希望服務(wù)器執(zhí)行的方法加法和減法操作,即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
});
}

由上代碼可見,實現(xiàn)并不是十分復(fù)雜。這僅僅是一個小型的應(yīng)用。如果我們的應(yīng)用 不是這么簡單,而是包含了30個不同的請求,將會發(fā)生什么狀況?我們不得不為不同的請求一次次編寫這些相同的代碼;每一次獲得一個請求對象,指定URL, 往往還要驗證參數(shù)類型等等。這種做法煩瑣無聊,而且常常導(dǎo)致錯誤。

Dojo的客戶端通過對應(yīng)用所需的遠程方法的簡單定義,生成客戶端函數(shù)調(diào)用這些方法,從而簡化了這整個過程。開發(fā)者只需要編寫定義文件,初始化RPC客戶端對象,所有這些遠程方法便可以供開發(fā)者正常使用。

需要編寫的定義,也稱為簡單方法描述(Simple Method Description(SMD))文件,是一個簡單的JSON字符串,定義了RPC請求將要處理的URL,這個URL可供調(diào)用的一些方法,以及這些方法 所需的參數(shù)。在我們這個范例中,這個定義文件的內(nèi)容如下:

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

在完成描述的創(chuàng)建之后,代碼將變得相當(dāng)簡單。這個定義可以以一個字符串,一個可以獲取到這個定義的URL,或者是一個JavaScript對象的方式提供。

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

以上就是客戶端創(chuàng)建遠程調(diào)用類的所有代碼,剩下的工作就是對方法的調(diào)用了。

myObject.add(3,5);

當(dāng)然,你可能會說:“相當(dāng)漂亮,但是我還需要獲取相加后的結(jié)果,而不僅僅是簡 單的調(diào)用”。獲得結(jié)果的實現(xiàn)同樣也很簡單。我們執(zhí)行了服務(wù)器的異步調(diào)用,myObject.add()調(diào)用的返回值是一個deferred對象(使用 Twisted Python或MochiKit的用戶對這個對象比較熟悉)。deferred對象允許開發(fā)者為結(jié)果事件附加一到多個的回調(diào)函數(shù)。我們的簡單范例如下:

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

或者是更為簡單直接的方式:

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

由上代碼可見,我們?yōu)閙yObject.add()返回的deferred對 象附加了myCallbackMethod作為一個回調(diào)函數(shù)。在這個范例中myCallbackMethod將通過使用參數(shù)8被調(diào)用。同時,我們也可以附 加錯誤處理的回調(diào)函數(shù)到deferred對象。我們可以附加任意個回調(diào)函數(shù),他們將被依次調(diào)用。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多