新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一種嵌入式RPC的設(shè)計與實現(xiàn)

一種嵌入式RPC的設(shè)計與實現(xiàn)

作者: 時間:2011-06-10 來源:網(wǎng)絡(luò) 收藏

1.4 Sun
Sun 有時也稱為ONC(Open Network Computing)。Sun RPC提供了一個接口語言IDL和rpcgen用于C語言支持。這門語言可以定義constants,typedef,structure,union。rpcgen可以產(chǎn)生server code,client stub和頭文件。server code主要是建立socket,注冊端口和監(jiān)聽,接受連接,拆參數(shù),調(diào)用實際的過程,打包返回值。client stub則是打包參數(shù),發(fā)送給server,將返回值解包。Sun RPC缺點就是對Windows沒有很好的支持。

2
與傳統(tǒng)的模型不同,服務(wù)器端分為:網(wǎng)絡(luò)通訊,接收狀態(tài)機(jī)和過程處理??蛻舳朔譃榫W(wǎng)絡(luò)通訊,發(fā)送狀態(tài)機(jī)和過程調(diào)用。
圖3是服務(wù)器端的狀態(tài)機(jī)。服務(wù)器進(jìn)程從初始狀態(tài)進(jìn)入GetHeader狀態(tài)。GetHeader是讀取遠(yuǎn)程過程調(diào)用的頭信息。如果一次得到了所有數(shù)據(jù),也就是nCurLen>=dwTotalSize,則進(jìn)入GetComplatePacket狀態(tài),反之進(jìn)入GetData狀態(tài)。GetData是讀取參數(shù)數(shù)據(jù),讀取數(shù)據(jù)直到得到所有的數(shù)據(jù)進(jìn)入GetComplatePacket狀態(tài)。期間如果超時,則回到GetHeader狀態(tài)。超時的起始時間從GetHeader韻第一個字節(jié)算起,如果在定義的時間無法讀取dwTotalSize個字節(jié),則Timeout從而回到GetHeader狀態(tài)。在GetHeader和GetData時,如果讀取數(shù)據(jù)有錯誤(如客戶端斷開連接,recv函數(shù)返回錯誤)則狀態(tài)機(jī)退出。GetComplatePacket是得到了完整的包。CheckCall判斷當(dāng)前的調(diào)用是否是有效的過程調(diào)用。如果無效則進(jìn)入狀態(tài),并回復(fù)無效命令給客戶端,最后進(jìn)入GetHeader狀態(tài)。如果有效,則處理此調(diào)用,最后發(fā)送結(jié)果給客戶端。

本文引用地址:http://m.butianyuan.cn/article/150615.htm

c.JPG d.JPG


圖4為客戶端狀態(tài)機(jī)。首先是打包參數(shù),發(fā)送到服務(wù)器端,等待服務(wù)器端的回復(fù),進(jìn)入GetHeader狀態(tài)。GetHeader,GetData和Get Com-plate Packet與服務(wù)器相應(yīng)的狀態(tài)意義相同。如果timeout則返回timeout錯誤。如果得到了整個packet則拆分最后返回。
DCE—RPC和ONC—RPC允許選擇UDP或TCP協(xié)議。TCP協(xié)議傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù)。UDP協(xié)議不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達(dá)目的地?;赥CP協(xié)議的可靠性,選擇TCP作為通訊協(xié)議。
3
3.1 數(shù)據(jù)結(jié)構(gòu)
服務(wù)器和客戶用共用包頭信息和每個過程的參數(shù)結(jié)構(gòu)。頭信息定義如下。dwCallID是過程的標(biāo)識號。每個過程都有一個唯一的號碼。bCallType是調(diào)用的類型。dwTotalSize是整包的字節(jié)數(shù)。dwReturn是返回結(jié)果。
e.JPG

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉