jsonrpc**主要用於同一主機不同程序間通訊,只需要編寫配置檔案,就能生成兩個介面用於兩個程序通訊。
注:使用該功能必須先安裝jsonrpc庫,該庫依賴於jsoncpp,同時需要安裝scons與cmake。
編寫環境:linux作業系統,c++語言,g++編譯器
編寫配置檔案,配置檔案是json格式,例子:[
, ,
"returns": "connecttest responce data json string" }
]這個例子寫了兩對介面,第乙個介面函式名為connectser,返回值是string型別,沒有引數。
第二個介面函式名為connecttest,有乙個引數,引數名為canshu,引數型別為string,返回值為string型別。
編寫完成後在命令列輸入
jsonrpcstub (配置檔名) --cpp-server=(生成接收端檔名) --cpp-client=(生成傳送端檔名)
比如建立的json檔名為test,需要生成接收端為absserstuser,傳送方為uistucli
jsonrpcstub test.json --cpp-server=absserstuser --cpp-client=uistucli
就能生成absserstuser.h與uistucli.h兩個標頭檔案,需要通訊的兩個程序分別呼叫這兩個標頭檔案便能進行通訊。
接收方編寫:
標頭檔案中需要新增
與標頭檔案
同時也需要新增剛才生成的標頭檔案
並宣告
using namespace jsonrpc;
建立相應的類
class servstubserver : public absserstuser
virtual std::string connectser();
virtual std::string connecttest(const std::string& canshu);
};
建立完成後在需要接收的類中public下新增
httpserver *hs; //用於新增監聽用埠號
servstubserver *_lprpcserver;
在該類的建構函式中新增
hs = new httpserver(8363); //監聽埠為8363
_lprpcserver = new servstubserver(*hs);
_lprpcserver->startlistening(); //開始監聽,等待傳送方傳送訊息
新增實現功能函式(具體功能為寫出,需根據需求自己編寫)
string servstubserver::connectser();
string servstubserver::connecttesr(const string &canshu);
傳送方編寫:
標頭檔案中需要新增
與標頭檔案
同時也需要新增剛才生成的標頭檔案
還需新增標頭檔案
另在需要傳送資料的類中public下新增傳送函式
string connectser() throw(jsonrpc::jsonrpcexception);
(此處函式名引數之類的可自己更改)
string connecttest(const std::string& canshu) throw (jsonrpc::jsonrpcexception);
實現傳送函式(該函式可自己編寫,紅色的部分是必須存在的):
string connectser() throw(jsonrpc::jsonrpcexception)
string connecttest(const std::string& canshu) throw (jsonrpc::jsonrpcexception)
ThinkPHP內建jsonRPC的缺陷分析
最近在開發ios應用,要開發ios應用,當然要用到伺服器,用伺服器必然要選用遠端呼叫協議,因為之前本人一直都是用php開發的,所以選用thinkphp當框架的apache伺服器.至於遠端呼叫協議,經過思考,還是選用jsonrpc吧,比較簡單方便,翻了一下thinkphp 是3.2版本 的手冊,發現t...
基於php的json rpc原理及應用
json rpc 是一種以json為訊息格式的遠端呼叫服務,它是一套允許執行在不同作業系統 不同環境的程式實現基於internet過程呼叫的規範和一系列的實現。這種 遠端過程呼叫 可以使用 作為傳輸協議 也可以使用其它傳輸協議,傳輸的內容是json訊息體。下面我們code一套基於php的rpc框架,...
NSKeyedArchiver的基礎用法
如下 cpp view plain copy print?nsstring str abc nsstring astr efg nsarray array nsarray arraywithobjects str,astr,nil 儲存資料 nskeyedarchiver archiverootob...