/** * log_message : log message * @param string $level log level * @param string $message message * @return None */ function log_message($level, $message = '') { $level = strtoupper($level); $begin = ''; $end = ''; $log = AppServer::get_instance()->get_log_file(); if (empty($log)) { switch ($level) { case 'ERROR': $begin = "[1;31;40m"; $end = "[0m"; break; case 'INFO': $begin = "[1;32;40m"; $end = "[0m"; break; default: break; } } $output = $begin . date('m-d H:i:s') . ' @' . getmypid() . ' : [' . $level . '] ' . $message . $end . PHP_EOL; if (empty($log)) { fwrite(STDERR, $output); } else { $lock = new swoole_lock(SWOOLE_MUTEX); $lock->lock(); $fp = fopen($log, 'a+'); fwrite($fp, $output); fclose($fp); $lock->unlock(); } }
$workers = []; $worker_num = 3; //创建的进程数 $finished = false; $lock = new swoole_lock(SWOOLE_MUTEX); for ($i = 0; $i < $worker_num; $i++) { $process = new swoole_process('process'); //$process->useQueue(); $pid = $process->start(); $workers[$pid] = $process; } foreach ($workers as $pid => $process) { //子进程也会包含此事件 swoole_event_add($process->pipe, function ($pipe) use($process, $lock, &$finished) { $lock->lock(); if (!$finished) { $finished = true; $data = $process->read(); echo "RECV: " . $data . PHP_EOL; } $lock->unlock(); }); } function process(swoole_process $process) { $response = 'http response'; $process->write($response); echo $process->pid, "\t", $process->callback . PHP_EOL; } for ($i = 0; $i < $worker_num; $i++) {
/** * release_sys_plugins : release system plugins * @param int $workerId worker id * @return boolean Operation result */ public function release_sys_plugins($workerId) { if (!isset($this->_sys_plugins[$workerId])) { return false; } $plugins =& $this->_sys_plugins[$workerId]; $cfg = $this->config->get('sys_plugin', array()); $lock = new swoole_lock(SWOOLE_MUTEX); $lock->lock(); while (count($cfg) > 0) { $name = array_pop($cfg); if (isset($plugins[$name])) { if (!$plugins[$name]->uninit()) { log_message('error', 'Failed to uninit plugin : ' . $name); } unset($plugins[$name]); } } $lock->unlock(); }