count = 1; //进程启动 $consumer->onWorkerStart = function($consumer) { App::initCommon(); $st="test/test"; $length = strlen($st); //创建tcp套接字 global $socket; $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); //连接tcp socket_connect($socket, '119.23.47.137',8083); //向打开的套集字写入数据(发送数据) $s = socket_write($socket, $st, $length); //从套接字中获取服务器发送来的数据 /*while(true){ $msg = socket_read($socket,8190); echo $msg; sleep(1); }*/ $time_interval = 1; \Workerman\Lib\Timer::add($time_interval, function () { try { global $socket; $msg = socket_read($socket,8190); //echo $msg; //[{"type":"LOGIN","status":"success"}] //[{"type":"DATA","wbMac":"C9DBBBFCEE26","rssi":-59,"gtMac":"D1127A899D6A","hr":93,"tp":"36.0","step":0,"cal":0}] $msg = json_decode($msg,true); if(!empty($msg)){ foreach($msg as $key => $val){ if($val['type'] == 'DATA'){ $data = [ 'createtime' => time(), 'type' => 'DATA', 'wbmac'=> isset($val['wbMac']) ? $val['wbMac'] : '', 'rssi' => isset($val['rssi']) ? $val['rssi'] : '', 'gtmac'=> isset($val['gtMac']) ? $val['gtMac'] : '', 'hr' => isset($val['hr']) ? $val['hr'] : '', 'tp' => isset($val['tp']) ? $val['tp'] : '', 'step' => isset($val['step']) ? $val['step'] : '', 'cal' => isset($val['cal']) ? $val['cal'] : '', ]; $rs = Db::name('socket_watch')->insertGetId($data); //每个学生每一个小时只保留一条记录 $student = Db::name('student')->where('watchmac',strtolower($data['wbmac']))->find(); if($student){ $map = [ 'student_id' => $student['id'], 'typedata' => ['IN','1,4,5'], 'createtime' => ['gt',time()-3600], ]; $check = Db::name('student_life')->where($map)->find(); if(empty($check)){ $life = [ [ 'typedata' => 1, 'student_id' => $student['id'], 'info' => $data['tp'], 'createtime' => time(), 'classes_id' => $student['classes_id'], 'school_id' => $student['school_id'], ], [ 'typedata' => 4, 'student_id' => $student['id'], 'info' => $data['hr'], 'createtime' => time(), 'classes_id' => $student['classes_id'], 'school_id' => $student['school_id'], ], [ 'typedata' => 5, 'student_id' => $student['id'], 'info' => $data['step'], 'createtime' => time(), 'classes_id' => $student['classes_id'], 'school_id' => $student['school_id'], ], ]; Db::name('student_life')->insertAll($life); } } //每个学生每一个小时只保留一条记录 } } } } catch (\Exception $e) { echo $e->getMessage(); } }); }; //进程关闭 $consumer->onWorkerStop = function($consumer) { restore_error_handler(); }; //日志 class LogService { // 日志级别 从上到下,由低到高 const EMERG = 'EMERG'; // 严重错误: 导致系统崩溃无法使用 const ALERT = 'ALERT'; // 警戒性错误: 必须被立即修改的错误 const CRIT = 'CRIT'; // 临界值错误: 超过临界值的错误,例如一天24小时,而输入的是25小时这样 const ERR = 'ERR'; // 一般错误: 一般性错误 const WARN = 'WARN'; // 警告性错误: 需要发出警告的错误 const NOTICE = 'NOTIC'; // 通知: 程序可以运行但是还不够完美的错误 const INFO = 'INFO'; // 信息: 程序输出信息 const DEBUG = 'DEBUG'; // 调试: 调试信息 const SQL = 'SQL'; // SQL:SQL语句 注意只在调试模式开启时有效 public static function record($message, $level = self::INFO) { $mem = intval(memory_get_usage() / 1024 / 1024); $msg = date('Ymd H:i:s', time()).' '.$level.' ['.str_pad($mem, 4, " ", STR_PAD_LEFT).'M] '.$message; echo $msg."\n"; } static public function appError($errno, $errstr, $errfile, $errline) { if($errno == E_ERROR) { $errorStr = "$errstr ".$errfile." 第 $errline 行."; self::record("[$errno] $errstr ".$errfile." 第 $errline 行.", self::ERR); } } function heat() { //调试模式下输出错误信息 $trace = debug_backtrace(); //$e['message'] = $error; $e['file'] = $trace[0]['file']; $e['class'] = $trace[0]['class']; $e['function'] = $trace[0]['function']; $e['line'] = $trace[0]['line']; $traceInfo = ''; $time = date('y-m-d H:i:m'); foreach($trace as $t) { $traceInfo .= '['.$time.'] '; if(isset($t['file'])) { $traceInfo .= $t['file']; } if(isset($t['line'])) { $traceInfo .= ' ('.$t['line'].') '; } if(isset($t['class'])) { $traceInfo .= $t['class']; } $traceInfo .= $t['function'].'('; //$traceInfo .= implode(', ', $t['args']); $traceInfo .= ')'."\n"; } echo $traceInfo; //$e['trace'] = $traceInfo; } function clear() { $cmd = "echo -ne \"\033[2J\n\""; $a = exec($cmd); print "$a"."\n"; } function color_b($string, $line = 0) { $cmd = "printf \"\033[".$line.";0H \033[01;40;32m".$string."\033[0m\n\""; $a = exec($cmd); print "$a"."\n"; } }