|
|
导航: |
论坛 -> 网络通讯
斑竹:liumazi,sephil |
|
作者: |
|
2013/7/3 12:55:26 |
标题: |
|
加入我的收藏 |
楼主: |
自己下了phprpc 和hprose 看介绍很是激动人心 。但在我delphi7下都装不起。。。 都 提示indy包找不到 但实际上我用indy相关组件一点问题都没有 。 有没有别的推荐一下?跨平台的 谢谢
----------------------------------------------
五毒公主 认准了delphi ,没经历学更多 就努力成功delphi高手吧 |
作者: |
|
2013/7/3 17:11:50 |
1楼: |
对于delphier来说,最简单、易于实现的,莫过于JsonRPC了,像PHPRPC、XMLRPC一样,都是基于HTTP协议的、交换格式化文本信息为主的RPC协议,参考: http://json-rpc.org/
也可以使用流式Socket实现二进制远过程调用,牺牲跨平台性能,却大幅提升性能,比如,QuickBurro的BinRPC
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2013/7/3 18:12:26 |
2楼: |
可是 delphi很悲剧 json-rpc 没有delphi的实现
----------------------------------------------
五毒公主 认准了delphi ,没经历学更多 就努力成功delphi高手吧
|
作者: |
|
2013/7/3 19:23:38 |
3楼: |
晕死,理解了Json-rpc后,具体实现就很简单啦:
1、jsonrpc客户端 superobject(或其他json类)+ IDHttp控件,足够让你翘着二郎腿轻轻松松调用服务端方法
2、jsonrpc服务端 即使delphi实现服务端,也是非常的省力,比如:
// // JsonRPCDemo.pas -- JsonRPC任务处理范例 // Date: 2011.9.15. Author: Jopher(W.G.Z) // library jsonrpcdemo;
uses FastMM4, {$IFNDEF UNICODE} FastCode, {$ENDIF} FastMove, SysUtils,Classes,Windows,AdoDB, {$IFDEF UNICODE} AnsiStrings, {$ENDIF} QBParcel,QBJson,DllSpread,NodeServiceAPI;
{$R *.RES}
// // 主函数... function MainFunction(RequestParcel: TQBParcel; ResponseParcel: TQBParcel): boolean; var ResponseBody: AnsiString; Param: TQBParcel; fldtype,flduserid,fldusername,flduserpassword: AnsiString; Json: TQBJson; begin // // 从客户端发来的请求数据(Json格式), // 会以Web表单数据的形式发来,故可以从Request容器里取出并解码... Param:=TQBParcel.Create; RequestParcel.GetParcelGoods('Parameters',Param); fldtype:=AnsiString(UTF8ToString(Param.GetAnsiStringGoods('Type'))); flduserid:=AnsiString(UTF8ToString(Param.GetAnsiStringGoods('UserId'))); fldusername:=AnsiString(UTF8ToString(Param.GetAnsiStringGoods('UserName'))); flduserpassword:=Param.GetAnsiStringGoods('UserPassword'); Param.Free; // // 业务处理(作为demo, 这里简单地判定一下UserId=UserPassword),返回结果... Json:=TQBJson.Create; // // UserId=UserPassword时,当做成功... if flduserid=flduserpassword then begin Json.Put('success',true); Json.Put('msg','大哥,密码正确,调用成功了喂!'); end // // UserId<>UserPassword时,当作失败... else begin Json.Put('success',false); Json.Put('msg','大哥,密码不对啊!'); end; // // UTF8编码... ResponseBody:=UTF8Encode(string(Json.ToString)); // // 保存应答信息,返回(主程序会自动将应答信息反馈给浏览器)... Json.Free; ResponseParcel.PutAnsiStringGoods('ResponseBody',ResponseBody); result:=true; end;
// // 导出函数,应用程序员不用改动... function WebpageProcess(InParcelPtr: integer; var OutParcelPtr: integer): boolean; stdcall; var aInParcel: TQBParcel; aOutParcel: TQBParcel; begin try aInParcel:=TQBParcel(InParcelPtr); except result:=false; exit; end; aOutParcel:=TQBParcel.Create; Result:=MainFunction(aInParcel,aOutParcel); if aOutParcel.GoodsCount<=0 then OutParcelPtr:=0 else OutParcelPtr:=Parcel2Mem(aOutParcel); aOutParcel.free; end;
exports WebpageProcess;
begin end.
----------------------------------------------
樵夫的大马甲
|
|