Exemplo n.º 1
0
/**
 * 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 = "";
                $end = "";
                break;
            case 'INFO':
                $begin = "";
                $end = "";
                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();
    }
}
Exemplo n.º 2
0
<?php

$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;
}
Exemplo n.º 3
0
<?php

/**
 * SWOOLE_MUTEX 互斥锁
 * SWOOLE_FILELOCK 文件锁,需要在第二个参数传入一个锁文件
 * SWOOLE_SPINLOCK 自旋锁(请查看swoole扩展信息,检测是否支持)
 * SWOOLE_SEM 信号量
 * SWOOLE_RWLOCK 读写锁
 */
$lock = new swoole_lock(SWOOLE_MUTEX);
echo "[Master]create lock\n";
$lock->lock();
if (pcntl_fork() > 0) {
    sleep(1);
    $lock->unlock();
} else {
    echo "[Child] Wait Lock\n";
    $lock->lock();
    echo "[Child] Get Lock\n";
    $lock->unlock();
    exit("[Child] exit\n");
}
echo "[Master]release lock\n";
unset($lock);
sleep(1);
echo "[Master]exit\n";
Exemplo n.º 4
0
 /**
  * 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();
 }