aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 47043|回复: 24

Hprose for aardio

[复制链接]

1

主题

4

回帖

30

积分

荣誉会员

积分
30
发表于 2012-11-25 02:52:26 | 显示全部楼层 |阅读模式
Hprose 是一个非常简单易用且功能强大的跨语言跨平台的远程服务引擎,支持很多语言,这次也出aardio版了。

hprose for aardio 已经独立出来了,
下载地址是:https://github.com/hprose/hprose-aardio

评分

参与人数 1 +1000 收起 理由
JacenHe + 1000 赞一个!感谢分享!

查看全部评分

1

主题

4

回帖

30

积分

荣誉会员

积分
30
 楼主| 发表于 2014-2-14 09:26:20 | 显示全部楼层
一、创建服务端

以PHP为例,首先下载 hprose-php
下载地址: https://github.com/hprose/hprose-php/archive/master.zip
如果无法下载上面的最新版,可以下载这个附件也可以: hprose-php.7z (17.24 KB, 下载次数: 1038)

解压下载的压缩包,您可以在看到以下文件:
hprose-php.jpg
/hprose-php/README_zh_CN.md 是用法说明
/hprose-php/LICENSE.md 则是许可文件,hprose是使用MIT开源许可证,可免费使用。
/hprose-php/php5文件夹 下面就是hprose的的PHP源码了,将这个目录复制或上传到您的网站任意目录下,

例如复制/hprose-php/php5/example/php5 目录。
然后我们创建一个 /example/index.php 输入下面的PHP代码:

  1. <?php
  2.     require_once('php5/HproseHttpServer.php');

  3.     function hello($name) {
  4.         return 'Hello ' . $name;
  5.     }

  6.     $server = new HproseHttpServer();
  7.     $server->addFunction('hello');
  8.     $server->start();
  9. ?>
复制代码
非常简单,您已经在服务端创建了一个hello函数。

二、aardio客户端同步调用:

Hprose for aardio 的客户端同步调用很简单:

  1. import console;
  2. import hprose;

  3. //创建客户端
  4. var client = hprose.HttpClient("http://hprose.com/example/");

  5. //调用服务端函数
  6. var str = client.hello("world");

  7. //显示函数返回值
  8. console.log(str)

复制代码
服务器端如果发生错误,或者服务器端的服务函数或方法抛出异常,将会被发送到客户端,并且将在客户端抛出异常,你可以使用try语句来捕获它。

三、aardio客户端异步调用:

hprose-aauto.jpg
在开发 winform 应用时,你最好使用异步调用,这样在通讯中界面也不会发生卡住假死的现象:

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="hprose异步调用";right=465;bottom=253)
  4. winform.add(button={cls="button";text="调用服务端函数";left=239;top=165;right=379;bottom=203;z=2};
  5. edit={cls="edit";left=22;top=15;right=432;bottom=127;edge=1;multiline=1;z=1} )
  6. /*}}*/

  7. import hprose;
  8. winform.button.oncommand = function(id,event){
  9.         winform.edit.text = "";
  10.        
  11.     var client = hprose.HttpClient("http://hprose.com/example/");
  12.     client.hello("async world", function(result) {
  13.         winform.edit.text = '服务端返回值: \r\n' ++ result;
  14.     }, function(name, err) {
  15.         winform.edit.text = '错误信息: \r\n' ++ err;
  16.     });
  17. }

  18. winform.show();
  19. win.loopMessage();
复制代码
当用异步调用时,你需要在成功回调函数之后再传递一个错误回调函数来接收服务器端异常(就像上面例子那样)。如果你忽略了该回调函数,客户端将忽略异常,就像从来没发生过一样。

四、hprose javascript版客户端

使用aardio创建web窗体调用hprose javascript版客户端,
请注意script节点中要使用flashpath指明hproseHttpRequest.swf所在目录。

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = ..win.form(text="hprose-javascript测试";right=599;bottom=399)
  4. /*}}*/

  5. import web.form;
  6. var wb = web.form( winform );//创建web窗体

  7. wb.html = /**
  8. <html>
  9. <head>
  10. <script type="text/javascript"
  11. src="http://rawgithub.com/hprose/hprose-js/master/dist/hprose.js"
  12. flashpath="http://rawgithub.com/hprose/hprose-js/master/dist/">
  13. </script>
  14. </head>
  15. <body>
  16. <script type="text/javascript">
  17.     var client = new HproseHttpClient("http://www.hprose.com/example/", ["hello"]);
  18.     client.hello("World!", function(result) {
  19.         alert(result);
  20.     }, function(name, err) {
  21.         alert(err);
  22.     });
  23. </script>
  24. </body>
  25. **/

  26. winform.show();  
  27. win.loopMessage();
复制代码

0

主题

1

回帖

5

积分

新手入门

积分
5
发表于 2012-11-27 14:26:53 | 显示全部楼层
稀饭!谢谢!

1

主题

4

回帖

30

积分

荣誉会员

积分
30
 楼主| 发表于 2012-12-15 10:59:05 | 显示全部楼层
已经支持异步调用了!

4

主题

852

回帖

4689

积分

荣誉会员

积分
4689
发表于 2012-12-15 20:03:43 | 显示全部楼层
感谢andot,很有意思学习下

6

主题

52

回帖

453

积分

二级会员

积分
453
发表于 2012-12-16 15:49:31 | 显示全部楼层
感谢楼主 我来学习一下

0

主题

72

回帖

475

积分

二级会员

积分
475
发表于 2012-12-16 23:34:32 | 显示全部楼层
探个究竟

48

主题

542

回帖

3328

积分

五级会员

积分
3328
发表于 2013-5-13 18:49:44 | 显示全部楼层
队伍壮大了,学习下

8

主题

58

回帖

451

积分

二级会员

积分
451
发表于 2013-5-13 20:32:46 | 显示全部楼层
强大

6

主题

51

回帖

574

积分

三级会员

积分
574
发表于 2013-5-14 17:32:33 | 显示全部楼层
学习

0

主题

5

回帖

317

积分

二级会员

积分
317
发表于 2013-11-10 17:48:45 | 显示全部楼层
楼主能提供个范例吗,想把hprose用在项目上,不知怎么入手。

0

主题

1

回帖

38

积分

新手入门

积分
38
发表于 2014-2-14 17:00:46 | 显示全部楼层
这个非常有用,正好这几天在研究,还没有完全吃透。

0

主题

13

回帖

135

积分

一级会员

积分
135
发表于 2014-2-18 20:50:15 | 显示全部楼层
aardio一直与最in的技术接轨!支持aardio!

1

主题

4

回帖

30

积分

荣誉会员

积分
30
 楼主| 发表于 2014-2-19 17:00:43 | 显示全部楼层
今天发现已经进入aardio的扩展库了,真是好激动!支持aardio!祝aardio越来越强!

0

主题

12

回帖

77

积分

一级会员

积分
77
发表于 2014-3-19 08:42:53 | 显示全部楼层
这个真的很不错,希望能继续更新啊!

0

主题

5

回帖

27

积分

新手入门

积分
27
发表于 2014-3-26 19:20:46 | 显示全部楼层
学习中

0

主题

13

回帖

1093

积分

四级会员

积分
1093
发表于 2014-8-21 08:57:36 | 显示全部楼层
好好了解下

2

主题

4

回帖

52

积分

一级会员

积分
52
发表于 2014-11-27 11:00:26 | 显示全部楼层
想问一下,aardio里面传递对象怎么写,比如User,还有服务端怎么定义?我只会JAVA的

1

主题

4

回帖

30

积分

荣誉会员

积分
30
 楼主| 发表于 2015-1-31 22:32:55 | 显示全部楼层
在 aardio 客户端通过 class 来定义类,可以使用 @{ _type = "xxx" } 来定义类名,也可以通过 hprose.ClassManager.register 来注册类,第一个参数是类(类型名),第二个参数是类名(字符串)。通过类创建的对象就可以作为自定义对象传给服务器了。Java 一端定义更简单,也是定义类,可以通过 public 方式来定义字段,或者定义 public 的 get 和 set 方法作为属性。如果在 aardio 客户端只是接收服务器端传来的对象,在客户端也可以不用定义类,返回结果直接就是一个对象,对象所在的类会自动被定义。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-6-13 09:22 , Processed in 0.112373 second(s), 31 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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