DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tkzcol
今日帖子: 13
在线用户: 21
导航: 论坛 -> 网络通讯 斑竹:liumazi,sephil  
作者:
男 1314tim (五毒公主) ★☆☆☆☆ -
普通会员
2013/7/3 12:55:26
标题:
rpc有什么组建推荐的? 浏览:2088
加入我的收藏
楼主: 自己下了phprpc  和hprose  看介绍很是激动人心 。但在我delphi7下都装不起。。。 都 提示indy包找不到  但实际上我用indy相关组件一点问题都没有 。
有没有别的推荐一下?跨平台的
谢谢
----------------------------------------------
五毒公主 认准了delphi ,没经历学更多 就努力成功delphi高手吧
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/7/3 17:11:50
1楼: 对于delphier来说,最简单、易于实现的,莫过于JsonRPC了,像PHPRPC、XMLRPC一样,都是基于HTTP协议的、交换格式化文本信息为主的RPC协议,参考:
http://json-rpc.org/

也可以使用流式Socket实现二进制远过程调用,牺牲跨平台性能,却大幅提升性能,比如,QuickBurro的BinRPC
----------------------------------------------
樵夫的大马甲
作者:
男 1314tim (五毒公主) ★☆☆☆☆ -
普通会员
2013/7/3 18:12:26
2楼: 可是  delphi很悲剧  json-rpc 没有delphi的实现
----------------------------------------------
五毒公主 认准了delphi ,没经历学更多 就努力成功delphi高手吧
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
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.
----------------------------------------------
樵夫的大马甲
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行46.875毫秒 RSS