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

相關文章
相關標籤/搜索