Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 7275|回复: 8

开源跨语言跨平台RPC——Hprose for Lazarus

[复制链接]

该用户从未签到

发表于 2014-5-21 10:55:33 | 显示全部楼层 |阅读模式

Hprose 全名是高性能远程对象服务引擎。 它是一个新型的轻量级跨语言跨平台面向对象的高性能远程动态通讯中间件。它不但易学易用,而且功能强大。你只需要一点时间学习,就可以用它来轻松构建跨语言跨平台的分布式应用系统。 本项目是 Hprose 的 Delphi/Lazarus 版本实现。

项目地址:https://github.com/hprose/hprose-delphi

国内镜像地址:
https://code.csdn.net/Hprose/hprose-delphi
http://gitcafe.com/hprose/hprose-delphi

回复

使用道具 举报

该用户从未签到

发表于 2014-5-27 14:57:25 | 显示全部楼层
看着介绍好像不错,有时间学习一下
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-5-27 23:05:36 | 显示全部楼层
多谢支持!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-5-28 10:16:27 | 显示全部楼层
andot 发表于 2014-5-27 23:05
多谢支持!

有例子吗? 包括跟其他语言通讯,比如JAVA。。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-5-28 10:19:32 | 显示全部楼层
看了些file list ,通讯底层是通过indy 组件实现的吧? 我很多年前用过indy,感觉挺臃肿的而且处理并发的能力一般,不知道有没有更好的通讯套件推荐。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-5-30 18:13:54 | 显示全部楼层
有Indy版,也有Synapse版本的,这两个版本用法完全一样,所以只能安装其中一个版本,在Lazarus上相对来说,用Synapse版本比较方便一些,因为indy安装挺麻烦的。

至于使用挺简单的,这里有个例子:
  1. unit Unit1;

  2. {$mode objfpc}{$H+}

  3. interface

  4. uses
  5.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  6.   HproseHttpClient, HproseClient;

  7. type

  8.   { TForm1 }

  9.   TForm1 = class(TForm)
  10.     Button: TButton;
  11.     Client: THproseHttpClient;
  12.     TextLabel: TLabel;
  13.     procedure ButtonClick(Sender: TObject);
  14.   private
  15.     procedure Callback(Result: Variant);
  16.     { private declarations }
  17.   public
  18.     { public declarations }
  19.   end;

  20. var
  21.   Form1: TForm1;

  22. implementation

  23. {$R *.lfm}

  24. { TForm1 }

  25. procedure TForm1.ButtonClick(Sender: TObject);
  26. var
  27.   Stub: Variant;
  28. begin
  29.   Stub := Client.UseService('http://www.hprose.com/example/');
  30.   Stub.Hello('World!', HproseCallback(@Callback));
  31. end;

  32. procedure TForm1.Callback(Result: Variant);
  33. begin
  34.   TextLabel.Caption := Result;
  35. end;

  36. end.
复制代码
这个例子中的服务是php写的,不过调用任何语言的服务用起来都是一样的。

更详细的使用这里有份指南:https://github.com/andot/hprose/ ... pascal.pdf?raw=true

不过这个文档有些老了,里面的客户端控件的名字跟现在的不一样了(现在的没有 Id 或 Syna 这个标识了,目的是为了在使用不同实现的 Hprose 客户端之间实现零修改转换),调用方式上,现在的方式(上面例子中的方式)也比文档上的简单了。另外,新版中,对象在包装成 Variant 后,也可以继续操作对象的属性,并可以直接在包装之后的 Variant 变量上调用 Free 方法来释放对象了。这对于远程传递的纯数据对象来说,就可以免除 Variant 到具体类型对象的转换了。

回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-5-30 18:16:36 | 显示全部楼层
Indy 版本适合在 Delphi 的高版本上使用,原因是 Delphi 从 XE3 之后就跨平台了,到现在的 XE6 都可以支持 android 和 iOS 了,而 Synapse 这套组件不支持在 Delphi 上跨平台。所以在 Delphi 高版本上用 Indy 版本的 Hprose,可以实现跨平台使用。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-6-4 08:25:28 | 显示全部楼层
加油
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-12-8 10:10:00 | 显示全部楼层
好东东
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 12:21 , Processed in 0.030753 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表