同步mysql
swoole 2018-06-13 15:27:33

 

PHP Code复制内容到剪贴板
  1. <?php  
  2. define('WS_PORT''9506');//websocket端口号  
  3.   
  4. define('MYSQL_HOST''mysql');  
  5. define('MYSQL_PORT', 3306);  
  6. define('MYSQL_USER''root');  
  7. define('MYSQL_PASSWORD''m123456,');  
  8. define('MYSQL_DATABASE''widom-site-jiangbei');  
  9.   
  10. define('INSERT_COUNT', 40); //获取多少条信息以后开始写入数据库  
  11. define('LIST_KEY''xt_door'); // 门禁刷卡的队列名称,可以随意取,但请尽量长以区别redis的其他key  
  12. define('REDIS_IP','redis'); //这里提容器的名称,也可以是127.0.0.1等  
  13. define('REDIS_PORT',6379);  //redis端口号  
  14. define('REDIS_CUT_STRING''||||'); // redis入库时的数据分割符  
  15.   
  16. class WebsocketTest  
  17. {  
  18.   
  19.     public $server;  
  20.   
  21.     public function __construct()  
  22.     {  
  23.         $serv = new swoole_websocket_server("0.0.0.0", WS_PORT);  
  24.   
  25.         $serv->set([  
  26.             'daemonize' => false,      // 设置守护进程模式  
  27.             'log_file' => '/var/www/html/logs/http_server_9506.log',  
  28.         ]);  
  29.   
  30.         $serv->on('open'function (swoole_websocket_server $server$request) {  
  31. //            echo "server: handshake success with fd{$request->fd}\n";  
  32.         });  
  33.   
  34.         $serv->on('message'function (swoole_websocket_server $server$frame) {  
  35. //            echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";  
  36. //            $server->push($frame->fd, "this is server");  
  37.         });  
  38.         $serv->on('close'function ($ser$fd) {  
  39. //            echo "client {$fd} closed\n";  
  40.         });  
  41.         $serv->on('request', [$this'onRequest']);  
  42.   
  43.         $this->server = $serv;  
  44.         $serv->start();  
  45.     }  
  46.   
  47.     public function onRequest($request$response){  
  48.         $data = $request->get;  
  49.         if(!$data){  
  50.             return false;  
  51.         }  
  52.         // 接收http请求从get获取message参数的值,给用户推送  
  53.         if(array_key_exists("act",$data)){  
  54.   
  55.             $serv = $this->server;  
  56.   
  57.             $ret = [];  
  58.             $push = []; //push给前台  
  59.             switch ($data['act']){  
  60.                 case "heart":  
  61.                     $ret = $this->handleHeart($data);  
  62.                     break;  
  63.   
  64.                 case "card-status":  
  65.   
  66.                     if($res = $this->cardStatus($data)){  
  67.                         $ret = $res["ret"];  
  68.                         $push = $res["user"];  
  69.                     }  
  70.   
  71.                     break;  
  72.   
  73.                 default:  
  74.                     break;  
  75.             }  
  76.   
  77.             if($push){  
  78.                 $push = json_encode($push,JSON_UNESCAPED_UNICODE);  
  79.                 if(!emptyempty($serv->connections)){  
  80.                     // 给所有连接的设备广播***********  
  81.                     foreach ($serv->connections as $fd) {  
  82.                         // 判断是不是websocket连接, 如果是,返回的数组中会有websocket_status  
  83.                         $info = $serv->connection_info($fd); //  
  84.                         if(array_key_exists("websocket_status",$info)){  
  85.                             if($info['websocket_status']){  
  86.                                 // 如果有这项,就表示是websocket连接了  
  87.                                 // 1,连接进入等待握手  
  88.                                 // 2,正在握手  
  89.                                 // 3,已握手成功等待浏览器发送数据帧  
  90.                                 if($info['websocket_status'] == 3){  
  91.                                     $serv->push($fd$push);  
  92.                                 }  
  93.                             }  
  94.                         }  
  95.                     }  
  96.                 }  
  97.             }  
  98.             if($ret){  
  99.                 $ret = json_encode($ret,JSON_UNESCAPED_UNICODE);  
  100.                 $response->end($ret);  
  101.             }  
  102.   
  103.         }  
  104.     }  
  105.   
  106.     protected function cardStatus($data){  
  107.   
  108.         $card = $data['Card']; //卡号  
  109.         $type = $data['type']; //数据类型  
  110.         $serial = $data['Serial']; //控制器序列号,用于区别设备  
  111.         $ID = $data['ID']; //控制器序标识符, 如1F7164  
  112.         $reader = $data['Reader']; //读头 0-1,1表示外接读头, 0进,1出  
  113.         $status = $data['Status']; //当前门状态, 16进制值字符串  
  114.         $rand = $data['Index']; //随机值  
  115.         $ydata = json_encode($data);  
  116.   
  117.         if(!isset($card) || !isset($type) || !isset($serial) || !isset($ID) || !isset($reader) || !isset($status) || !isset($rand)){  
  118.             echo "数据不正确";  
  119.             echo $ydata;  
  120.             return [];  
  121.         }  
  122.   
  123.         if($reader==1){  
  124.             $action = "出场";  
  125.         }else if($reader==0){  
  126.             $action = "进场";  
  127.         }else{  
  128.             $action = "";  
  129.         }  
  130.   
  131.         $note = "事件:" . $action;  
  132.   
  133.         $db = new Swoole\Coroutine\MySQL();  
  134.         $server = [  
  135.             'host' => MYSQL_HOST,  
  136.             'port' => MYSQL_PORT,  
  137.             'user' => MYSQL_USER,  
  138.             'password' => MYSQL_PASSWORD,  
  139.             'database' => MYSQL_DATABASE,  
  140.         ];  
  141.         $db->connect($server);  
  142.   
  143.         $sql = $db->prepare("select user_id,tit,gender,sfz,phone,dwid,bzi,gzi,area,dpt from `widom_user_profile` where nbid = ?");  
  144.         $user = $sql->execute([$card]);  
  145.         if($user){  
  146.             $user = $user[0];  
  147.             $gz = "";  
  148.             $gzi = $user['gzi']; //工种id  
  149.             if($gzi){  
  150.                 // 工种  
  151.                 $sql = $db->prepare("select nme from `widom_work_type_manage` where id=?");  
  152.                 $r = $sql->execute(array($gzi));  
  153.                 if($r){  
  154.                     $gz = $r[0]['nme'];  
  155.                 }  
  156.             }  
  157.             $bz = "";  
  158.             $bzi = $user['bzi']; //班组id  
  159.             if($bzi){  
  160.                 // 班组  
  161.                 $sql = $db->prepare("select nme from `widom_team_manage` where id=?");  
  162.                 $r = $sql->execute(array($bzi));  
  163.                 if($r){  
  164.                     $gz = $r[0]['nme'];  
  165.                 }  
  166.             }  
  167.             $dpt = "";  
  168.             $dpti = $user['dpt']; //部门id  
  169.             if($dpti){  
  170.                 // 部门  
  171.                 $sql = $db->prepare("select nme from `widom_department_manage` where id=?");  
  172.                 $r = $sql->execute(array($dpti));  
  173.                 if($r){  
  174.                     $dpt = $r[0]['nme'];  
  175.                 }  
  176.             }  
  177.             $user["gz_name"] = $gz;  
  178.             $user["bz_name"] = $bz;  
  179.             $user["dpt_name"] = $dpt;  
  180.         }else{  
  181.             $user = array(  
  182.                 "tit" => "未知",  
  183.                 "gz_name" => "未知",  
  184.                 "bz_name" => "未知",  
  185.                 "dpt_name" => "未知",  
  186.                 "gender" => 0  
  187.             );  
  188.         }  
  189.         $user['card'] = $card;  
  190.   
  191.         $AcsRes = "0";  
  192.         if($user){  
  193.             $AcsRes = "1"// 0禁止动作,1允许,2报警  
  194.             $voice = $action ." 刷卡成功";  
  195.         }else{  
  196.             $AcsRes = "2";  
  197.             $voice = $action ." 失败";  
  198.         }  
  199.   
  200.         $answer  = [  
  201.             "AcsRes" => $AcsRes,  
  202.             "ActIndex" => $reader//动作位置,进出场, 0-1  
  203.             "Time" => "10"//动作时间  
  204.             "Name" => $user->tit,  
  205.             "Note" => $note,  
  206.             "Card" => $card,  
  207.             "Voice" => $voice,  
  208.             "Systime" => date("Y-m-d H:i:s")  
  209.         ];  
  210.         $sql = $db->prepare("INSERT INTO `widom_sb_door_data` (`card`, `type`, `serial`, `control_id`, `reader`,`status`,`rand`,`ydata`,`answer_res`,`answer`,`created_at`) VALUES (?, ?, ?, ?, ?,?,?,?,?,?,?)");  
  211.         $in = [  
  212.             $card,  
  213.             $type,  
  214.             $serial,  
  215.             $ID,  
  216.             $reader,  
  217.             $status,  
  218.             $rand,  
  219.             $ydata,  
  220.             $AcsRes,  
  221.             json_encode($answer),  
  222.             time()  
  223.         ];  
  224.         $stmt2 = $sql->execute($in);  
  225.         if ($stmt2 == false)  
  226.         {  
  227.             var_dump($db->errno, $db->error);  
  228.         }  
  229.         return ["ret" => $answer,"user" => $user];  
  230.     }  
  231.   
  232.     protected function handleHeart($data){  
  233.         $serial = $data['Serial']; // 设备的序列号  
  234.         $ID = $data['ID']; //设备的自定义标识符, 如1F7164  
  235.         $key = $data['Key']; //发送的键值,服务器需要原值返回  
  236.         $status = $data['Status'];  
  237.         $rand = $data['Index']; //随机值  
  238.   
  239.         // 心跳包一直存log即可  
  240.         $file  = __DIR__ . '/../logs/door-heart-log.txt';//要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个  
  241.         $content = date('Y-m-d H:i:s'). ' _ '. json_encode($data) . PHP_EOL;  
  242.         file_put_contents($file$content,FILE_APPEND);  
  243.         return [  
  244.             "Key" => $key  
  245.         ];  
  246.     }  
  247.   
  248. }  
  249.   
  250. new WebsocketTest();  

 

PHP Code复制内容到剪贴板
  1. $sql = $taskdb->query("select * from {$tablename} where code = '{$code}'");  
  2. $stmt = $sql->fetch();  
  3.   
  4. var_dump($stmt);  

 

 

PHP Code复制内容到剪贴板
  1. $sql = $taskdb->query("select * from `users`");    
  2. $stmt = $sql->fetchAll();    
  3.     
  4. var_dump($stmt);    

 

 

 

 

本文来自于:http://www.yoyo88.cn/study/swoole/317.html

下一篇 备份
Powered by yoyo苏ICP备15045725号