并行的RPC框架(Concurrent RPC Framework) Yar Java Client

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了并行的RPC框架(Concurrent RPC Framework) Yar Java Client脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_406_1@简介

Yar 是一个轻量级, 高效的 RPC 框架, 它提供了一种简单方法来让 PHP 项目之间可以互相远程调用对方的本地方法. 并且 Yar 也提供了并行调用的能力. 可以支持同时调用多个远程服务的方法.
Yar 鸟哥博客介绍 http://www.laruence.com/2012/09/15/2779.html
Yar 鸟哥原始项目 https://github.com/laruence/yar
Yar Java Client 则实现了跨语言的远程调用。使得 Java 客户端能够调用 Yar PHP 服务器端本地的方法。

gIThub: https://github.com/zhoumengkang/yar-java-client
您的 star 就是对我们小菜的最大的鼓励,O(∩_∩)O~~

特性

  1. 执行速度快,依旧保持鸟哥初衷,框架轻,使用简单

  2. 支持并行的 RPC 调用

  3. 方法的使用和参数的和 PHP 版本保持一致

范例

PHP服务器端提供了服务

两个 rpc api ,模拟的业务场景是点赞赠送金币和发布帖子赠送金币。

<?php   class RewardscoreService {     /**      * $uid 给 $fid 点赞      * @param $fid  interge      * @param $uid  interge      * @return void      */     public function support($uid,$fid){         return "support:uid:$uid:fid:$fid";     }       /**      * $uid 发布了帖子 $fid       * @param $fid  interge      * @param $uid  interge      * @return void      */     public function post($uid,$fid){         return "post:uid:$uid:fid:$fid";     } }   $yar_server = new Yar_server(new RewardScoreService()); $yar_server->handle();

Java客户端同步调用这两个服务

public class YarClientTest extends TestCase {     /**      * 定义 rpc 接口      */     public interface RewardScoreService{         String support(int uid,int fid);         String post(int uid,int fid);     }      /**      * rpc api 地址      */     static String uri = "http://mengkang.net/demo/yar-server/RewardScoreService.php";      public void testUserService(){         // 第一种调用方式         YarClient yarClient  = new YarClient(uri);         RewardScoreService rewardScoreService = (RewardScoreService) yarClient.useService(RewardScoreService.class);         for (int i = 0; i < 10; i++) {             System.out.println(rewardScoreService.support(1, 2));         }         // 第二种调用方式         YarClientOptions yarClientOptions = new YarClientOptions();         yarClientOptions.setConnect_timeout(2000);         YarClient yarClient2  = new YarClient(uri,yarClientOptions);         RewardScoreService rewardScoreService2 = (RewardScoreService) yarClient2.useService(RewardScoreService.class);         for (int i = 0; i < 10; i++) {             System.out.println(rewardScoreService2.post(1, 20));         }     }  }

考虑到 Java 和 PHP 的数据类型的不同,这里做了一个折中的处理,返回数据类型客户端框架统一Object类型接受,然后使用时再根据接口定义的数据类型进行转换。

Java客户端并行调用这两个服务

这里的方法的命令皆以 Yar 原版为准则。
YarConcurrentClient.call方法注册,
YarConcurrentClient.loop并行调用,
YarConcurrentClient.reset清空任务
回调函数需要继承实现YarConcurrentCallback里面定义了两个方法:async是针对并行调用发出之后立即执行的任务,而success则是每个请求之后返回的结果。

public class YarConcurrentClientTest extends TestCase {      /**      * rpc api 地址      */     static String uri = "http://mengkang.net/demo/yar-server/RewardScoreService.php";      public class callback extends YarConcurrentCallback {          public void async() {             System.out.println("现在, 所有的请求都发出去了, 还没有任何请求返回");         }          public Object success() {             return retValue;         }      }      public class errorCallback extends YarConcurrentErrorCallback {         @Override         void error() {             System.out.println("出错了");         }     }      public void testLoop() throws Exception {          String packagerName = YarConfig.getString("yar.packager");         YarClientOptions yarClientOptions = new YarClientOptions();         yarClientOptions.setConnect_timeout(2000);          for (int i = 0; i < 10; i++) {             // 第一种调用方式             YarConcurrentClient.call(new YarConcurrentTask(uri, "support", new Object[]{1, 2}, packagerName, new callback()));             // 第二种调用方式 增加一些额外配置选项             YarConcurrentClient.call(new YarConcurrentTask(uri, "support", new Object[]{1, 2}, packagerName, new callback(),yarClientOptions));         }          for (int i = 0; i < 10; i++) {             // 第三种调用方式 有正确的回调和错误的回调             YarConcurrentClient.call(new YarConcurrentTask(uri,"post",new Object[]{1,2},packagerName,new callback(),new errorCallback()));             // 第四种调用方式 在第三种的基础上增加额外的配置选项             YarConcurrentClient.call(new YarConcurrentTask(uri,"post",new Object[]{1,2},packagerName,new callback(),new errorCallback(),yarClientOptions));         }          YarConcurrentClient.loop(new callback());         YarConcurrentClient.reset();     } }

github: https://github.com/zhoumengkang/yar-java-client
您的 star 就是对我们小菜的最大的鼓励,O(∩_∩)O~~

脚本宝典总结

以上是脚本宝典为你收集整理的并行的RPC框架(Concurrent RPC Framework) Yar Java Client全部内容,希望文章能够帮你解决并行的RPC框架(Concurrent RPC Framework) Yar Java Client所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。