Swoole Framework - SOA实现

Swoole Framework - SOAphp

Swoole_Framework/soa

最近因为业务关系某些模块须要分类,在此以前考虑过使用鸟哥的Yar,好处是在写服务端的同时,所作的注释能够在直接访问时,直接已文档形式呈现,并且在windows与Linux都有拓展支持,问题点就是接口文件暴露在外部,只能经过RSA之类加密来解决安全问题。最终选定了Swoole Framework的方案,由于是接口访问,因此在安全问题上能够很容易的使用iptables来解决,并且基于Swoole拓展的强大威力,Swoole的SOA不可小觑,通过半天测试如今简单整理成文章。html

1.下载框架框架

 
  1. git clone https://github.com/swoole/framework.git

2.建立服务端

./soa_server.PHPmysql

 
  1. <?php
  2. define('DEBUG', 'on');//开启debug模式,方便追踪问题
  3. define("WEBPATH", str_replace("\\","/", __DIR__));//设定app服务器路径
  4. require __DIR__ . '/../framework/libs/lib_config.php';//引用框架相关参数
  5.  
  6. $AppSvr = new Swoole\Protocol\SOAServer;
  7. $AppSvr->setLogger(new \Swoole\Log\EchoLog(true)); //Logger
  8. $AppSvr->addNameSpace('SW', __DIR__.'/models');//定义导入空间名为SW,读取models下全部文件
  9.  
  10. Swoole\Error::$echo_html = false;
  11. $server = Swoole\Network\Server::autoCreate('0.0.0.0', 8888);//本地端口
  12. $server->setProtocol($AppSvr);
  13. $server->daemonize(); //做为守护进程
  14. $server->run(array('worker_num' => 4, 'max_request' => 5000));

再看看models下的文件 
./models/Kaku/Chichi/Test.phplinux

 
  1. <?php
  2. namespace SW\Kaku\Chichi;//注意空间名和路径直接关系,根据功能等划分目录
  3.  
  4. class Test{
  5.  
  6. public function Search($args){
  7. $sql = "SELECT * FROM user WHERE 1 = 1 ";
  8. if(!empty($args['host'])){
  9. $sql .= " AND host = '{$args['host']}'";
  10. }
  11. if(!empty($args['user'])){
  12. $sql .= " AND user = '{$args['user']}'";
  13. }
  14. return \SW\Db::Run($sql);//从swoole挖了一个函数出来,以下
  15. }
  16.  
  17. }

数据库查询 
./models/Db.phpgit

 
  1. <?php
  2. namespace SW;
  3.  
  4. class Db{
  5.  
  6. public function Run($sql){
  7. $config = array(
  8. 'type' => \Swoole\Database::TYPE_MYSQLi,
  9. 'host' => "127.0.0.1",
  10. 'port' => 3306,
  11. 'dbms' => 'mysql',
  12. 'engine' => 'MyISAM',
  13. 'user' => "root",
  14. 'passwd' => "",
  15. 'name' => "mysql",
  16. 'charset' => "utf8",
  17. 'setname' => true,
  18. );
  19. $db = new \Swoole\Database($config);
  20. $db->connect();
  21. $result = $db->query($sql);
  22. return $result->fetchall();
  23. }
  24.  
  25. }

这样服务端就准备完成了,执行如下命令便可运行 
php ./soa_server.phpgithub

3.客户端

./soa_client.phpsql

 
  1. <?php
  2. define('DEBUG', 'off');
  3. define("WEBPATH", str_replace("\\","/", __DIR__));
  4. require __DIR__ . '/../framework/libs/lib_config.php';
  5. $cloud = new \Swoole\Client\SOA;
  6. $cloud->addServers(array('0.0.0.0:8888'));
  7.  
  8. $args = array(
  9. 'host' => 'localhost',
  10. 'user' => NULL,//为空时需定义,不然会提示错误
  11. );
  12.  
  13. $ret1 = $cloud->task("SW\\Kaku\\Chichi\\Test::Search", $args);
  14. $ret2 = $cloud->task("SW\\Kaku\\Chichi\\Test::Search", $args);
  15.  
  16. $n = $cloud->wait(0.5);//执行并设置500ms超时
  17.  
  18. if($n === 2){
  19. var_dump($ret1->data,$ret2->data['data']);//所有成功后输出
  20. }
  21. else{
  22. exit();
  23. }
  24.  

直接访问./soa_client.php 就能够看到结果了~数据库

https://github.com/kakuchichi/swoole_framework/tree/master/src/soa 完整代码windows

相关文章
相关标签/搜索