function forkChildInWorker() { global $serv; echo "on worker start\n"; $process = new swoole_process(function (swoole_process $worker) { // $serv = new swoole_server( "0.0.0.0", 9503 ); // $serv->set(array( // 'worker_num' => 1 // )); // $serv->on ( 'receive', function (swoole_server $serv, $fd, $from_id, $data) { // $serv->send ( $fd, "Swoole: " . $data ); // $serv->close ( $fd ); // }); // $serv->start (); // swoole_event_add ($worker->pipe, function ($pipe) use ($worker) { // echo $worker->read()."\n"; // }); // swoole_timer_add (1000, function ($interval) use ($worker) { // echo "#{$worker->pid} child process timer $interval\n"; // 如果worker中没有定时器,则会输出 process timer xxx // }); }); $pid = $process->start(); echo "Fork child process success. pid={$pid}\n"; //保存子进程对象,这里如果不保存,那对象会被销毁,管道也会被关闭 $serv->childprocess = $process; }
function run($options) { $asDaemon = isset($options['asDaemon']) ? $options['asDaemon'] : 0; if ($asDaemon) { \swoole_process::daemon(); } $pids = []; $workers = []; for ($i = 0; $i < $this->worker_num; $i++) { $process = new \swoole_process($this->workerStart, $this->redirect_stdout); $process->id = $i; $pid = $process->start(); $pids[] = $pid; $workers[$pid] = $process; } $pidFile = isset($options['pidFile']) ? $options['pidFile'] : 0; if ($pidFile) { $ppid = posix_getpid(); $pids[] = $ppid; file_put_contents($pidFile, implode("|", $pids)); } \swoole_process::signal(SIGTERM, function () use($workers) { exit(0); }); \swoole_process::signal(SIGINT, function () { exit(0); }); \swoole_process::wait(false); return $workers; }
function run() { //swoole_process::daemon(0, 1); $this->start_time = $this->middle_time = microtime(true); if ($this->status == 'import') { $db = new mysqli('127.0.0.1', 'root', '', 'friend'); //$db = new mysqli('119.254.111.25', 'myroot', '*****@*****.**', 'friend', 60002); $sql = "SELECT COUNT(*) FROM friend"; if ($result = $db->query($sql)) { $row = $result->fetch_row(); $this->data_row = $row[0]; $result->free(); } $db->close(); echo 'total data count: ' . $this->data_row . PHP_EOL; } //$this->data_row = 100000; for ($i = 0; $i < $this->worker_num; $i++) { $process = new swoole_process(array($this, 'child_async'), $this->redirect_stdout); $process->id = $i; $pid = $process->start(); $this->workers[$pid] = $process; //echo "Master: new worker, PID=".$pid."\n"; } $this->master_async(); }
public function onMessage(swoole_websocket_server $server, $frame) { var_dump($frame->data); $data = json_decode($frame->data, true); var_dump($data); $cmd = $data['cmd']; $is_block = isset($data['is_block']) ? $data['is_block'] : 0; if ($is_block) { if (isset($this->async_process[$frame->fd])) { $process = $this->async_process[$frame->fd]; } else { $process = new swoole_process(array($this, 'onTmpProcess'), true, 2); $process->start(); $this->async_process[$frame->fd] = $process; swoole_event_add($process->pipe, function () use($process, $frame) { $data = $process->read(); var_dump($data); $this->server->push($frame->fd, $data); }); } $process->write($cmd); sleep(1); } else { $this->process->write($cmd); $data = $this->process->read(); $this->server->push($frame->fd, $data); } }
static function run() { $table = new swoole_table(1024 * 256); $table->column('index', swoole_table::TYPE_INT); $table->column('serid', swoole_table::TYPE_INT); $table->column('data', swoole_table::TYPE_STRING, 64); $table->create(); self::$table = $table; for ($i = 0; $i < self::$key_num; $i++) { $key = 'user_' . (self::$key_base + $i); $ret = self::$table->set($key, array('index' => $i, 'serid' => rand(1000, 9999), 'data' => "hello_world_{$i}")); if (!$ret) { echo "count {$i} failed."; break; } } for ($i = 0; $i < self::$worker_num; $i++) { $process = new swoole_process('UnitTest_Table::worker'); $process->start(); $workers[$i] = $process; } for ($i = 0; $i < self::$worker_num; $i++) { $exit = swoole_process::wait(); echo "worker[{$i}] exit\n"; } }
/** * 创建一个子进程 * @param $task */ public function create_process($id, $task) { $this->task = $task; $process = new swoole_process(array($this, "run")); if (!($pid = $process->start())) { } //记录当前任务 Crontab::$task_list[$pid] = array("start" => microtime(true), "id" => $id, "task" => $task); }
/** * 创建一个子进程 * @param $classname * @param $number * @param $redis */ public function create_process($classname, $number, $redis) { $this->workers["classname"] = $classname; $this->workers["number"] = $number; $this->workers["redis"] = $redis; $process = new swoole_process(array($this, "run")); if (!($pid = $process->start())) { } //记录当前任务 Crontab::$task_list[$pid] = array("start" => microtime(true), "classname" => $classname, "number" => $number, "redis" => $redis, "type" => "worker", "process" => $process); }
function callback_timer_function() { $Handle = new TimingCall_Tasks(); $Handle->upDaemonTime(); $tasks = $Handle->readExecuteTasks(); foreach ($tasks as $task) { $process = new swoole_process('callback_process_function', true); $process->write(json_encode($task)); $process->start(); $process->wait(false); } }
private function worker_run() { for ($i = 0; $i < $this->process_number; $i++) { $process = new swoole_process(array($this, "worker_callback"), false, true); $pid = $process->start(); self::$workers[$i] = $process; self::$workers_pipe[$process->pipe] = $process; self::$restart_event[$i] = event_new(); //var_dump($process->pipe); event_set(self::$restart_event[$i], $process->pipe, EV_READ | EV_PERSIST, array($this, "relisten")); event_base_set(self::$restart_event[$i], $this->event_base); event_add(self::$restart_event[$i]); } }
public function run() { $this->current_num = $this->min_worker_num; for ($i = 0; $i < $this->current_num; $i++) { $process = new swoole_process(array($this, 'task_run'), false, 2); $pid = $process->start(); $this->process_list[$pid] = $process; $this->process_use[$pid] = 0; } foreach ($this->process_list as $process) { swoole_event_add($process->pipe, function ($pipe) use($process) { $data = $process->read(); var_dump($data); $this->process_use[$data] = 0; }); } swoole_timer_tick(1000, function ($timer_id) { static $index = 0; $index = $index + 1; $flag = true; foreach ($this->process_use as $pid => $used) { if ($used == 0) { $flag = false; $this->process_use[$pid] = 1; $this->process_list[$pid]->write($index . "Hello"); break; } } if ($flag && $this->current_num < $this->max_worker_num) { $process = new swoole_process(array($this, 'task_run'), false, 2); $pid = $process->start(); $this->process_list[$pid] = $process; $this->process_use[$pid] = 1; $this->process_list[$pid]->write($index . "Hello"); $this->current_num++; } var_dump($index); if ($index == 10) { foreach ($this->process_list as $process) { $process->write("exit"); } swoole_timer_clear($timer_id); $this->process->exit(); } }); }
protected function memoryCheck() { $process = new \swoole_process(function (\swoole_process $worker) { $worker->name("kerisy-rpcserver:memoryCheck"); swoole_timer_tick(1000, function () { $serverName = "kerisy-rpcserver:master"; Reload::load($serverName, 0.8); // echo date('H:i:s')."\r\n"; if (date('H:i') == '04:00') { Reload::reload($serverName); //休息70s sleep(70); } }); }); $process->start(); }
public static function createWorkerProcess($className, $number, $options) { $reflector = new \ReflectionClass($className); if (!$reflector->implementsInterface("PHPKit\\Console\\Workers\\IWorker")) { defined('PHPKIT_RUN_DEBUG') && syslog(LOG_ERR, 'class [' . $className . '] is error'); self::stop(); } else { $process = new \swoole_process(function ($worker) use($className, $number, $options) { $worker->name(self::$child_process_name . str_replace('\\', '_', $className) . '_' . $number); $handler = new $className($options); $handler->tick($worker); }); $pid = $process->start(); self::$worker_list[$pid] = ['className' => $className, 'number' => $number, 'process' => $process, 'options' => $options]; defined('PHPKIT_RUN_DEBUG') && syslog(LOG_INFO, 'create child process success:' . $pid); } }
/** * @brief 启动子进程 */ public function start() { $workerNum = $this->_objAha->getConfig()->get('aha', 'worker_num'); for ($i = 0; $i < $workerNum; $i++) { $worker = new \Daemon\Asyncworker($this->_objAha); $process = new \swoole_process(array($worker, 'start')); //$process->daemon(); $workerPid = $process->start(); $this->_workers[$workerPid] = $process; $process->write("worker started!"); } foreach ($this->_workers as $process) { $workerPid = \swoole_process::wait(); echo "[Worker Shutdown][WorkerId] {$workerPid} " . PHP_EOL; unset($this->_workers[$workerPid]); } }
/** * 创建一个子进程 * @param $task */ public function create_process($id, $task) { $this->task = $task; $process = new swoole_process(array($this, "run")); if (!($pid = $process->start())) { } //记录当前任务 Crontab::$task_list[$pid] = array("start" => microtime(true), "id" => $id, "task" => $task, "type" => "crontab", "process" => $process); swoole_event_add($process->pipe, function ($pipe) use($process) { $task = $process->read(); list($pid, $sec) = explode(",", $task); if (isset(Crontab::$task_list[$pid])) { $tasklist = Crontab::$task_list[$pid]; Crontab::$delay[time() + $sec] = $tasklist["task"]; $process->write($task); } }); }
* $redirect_stdin_stdout,重定向子进程的标准输入和输出。 启用此选项后,在进程内echo将不是打印屏幕,而是写入到管道。读取键盘输入将变为从管道中读取数据。 默认为阻塞读取。 * $create_pipe,是否创建管道,启用$redirect_stdin_stdout后,此选项将忽略用户参数,强制为true 如果子进程内没有进程间通信,可以设置为false */ if ($cfg && isset($cfg['muti_process']) && is_array($cfg['muti_process'])) { foreach ($cfg['muti_process'] as $proc_cfg) { $process = new swoole_process(function (swoole_process $worker) use($proc_cfg) { swoole_timer_tick($proc_cfg['ms'], function ($timer_id) use($proc_cfg) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $proc_cfg['url']); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); curl_close($curl); logprint('info', trim($data)); }); }, false, false); $pid = $process->start(); $workers[$pid] = $process; } } else { logprint('warn', 'cfg is invaild'); } master_process($workers); function logprint($level, $msg) { global $cfg; if ($cfg['debug'] == true) { echo '[' . date("Y/m/d H:i:s") . '] [' . $level . '] [' . posix_getpid() . '] [' . $msg . ']' . PHP_EOL; } else { file_put_contents($cfg['logfile'], '[' . date("Y/m/d H:i:s") . '] [' . $level . '] [' . posix_getpid() . '] [' . $msg . ']' . PHP_EOL, FILE_APPEND | LOCK_EX); } }
public function runAction() { //根据max_id, lastIndex,安排job $this->calculateJob(); //生成一个sitemap的index文件 $this->generateSitemapIndex(); exit; for ($i = 0; $i < $this->worker_num; $i++) { $process = new swoole_process(array($this, 'generate')); // 传递job给子进程 $process->sitemap_job = $this->jobs[$i]; $pid = $process->start(); $this->workers[$pid] = $process; } for ($i = 0; $i < $this->worker_num; $i++) { //阻塞 $ret = swoole_process::wait(); $pid = $ret['pid']; unset($this->workers[$pid]); echo "Worker Exit, PID=" . $pid . PHP_EOL; } }
function StartServ($phpStart, $cmd, $name) { $process = new swoole_process(function (swoole_process $worker) use($name, $cmd, $phpStart) { //目前指支持一个 $worker->exec($phpStart, array(STARTBASEPATH . "/lib/Swoole/shell/start.php", $cmd, $name)); //拉起server StartLogTimer(__LINE__ . ' ' . $phpStart . ' ' . STARTBASEPATH . '/lib/Swoole/shell/start.php ' . $cmd . ' ' . $name); }, false); $pid = $process->start(); $exeRet = swoole_process::wait(); return; }
public function runAction(){ //根据max_id, currentIndex,安排job $this->calculateJob(); // 参数 -g 判断是否需要生成sitemap if($this->generate){ echo "Starting generating sitemaps..."; //生成一个sitemap的index文件 $this->generateSitemapIndex(); for($i = 0; $i < $this->worker_num; $i++){ $process = new swoole_process(array($this, 'generate')); // 传递job给子进程 if(isset($this->jobs[$i])){ $process->sitemap_job = $this->jobs[$i]; } $pid = $process->start(); $this->workers[$pid] = $process; } for($i = 0; $i < $this->worker_num; $i++) { //阻塞 $ret = swoole_process::wait(); $pid = $ret['pid']; unset($this->workers[$pid]); echo "Generator Worker Exit, PID=".$pid.PHP_EOL; } echo "Finishing generating sitemaps..."; } // 参数 -p 判断是否需要推送url // 一次提交100条,开4个进程, if($this->push){ echo "Starting pushing urls..."; for($i = 0; $i < $this->worker_num; $i++){ $process = new swoole_process(array($this, 'push')); // 传递job给子进程 if(isset($this->jobs[$i])){ $process->sitemap_job = $this->jobs[$i]; } $pid = $process->start(); $this->workers[$pid] = $process; } for($i = 0; $i < $this->worker_num; $i++) { //阻塞 $ret = swoole_process::wait(); $pid = $ret['pid']; unset($this->workers[$pid]); echo "Push Worker Exit, PID=".$pid.PHP_EOL; } echo "Finishing pushing urls..."; } }
function StartServ($phpStart, $cmd, $name) { $process = new swoole_process(function (swoole_process $worker) use($name, $cmd, $phpStart) { //目前指支持一个 $worker->exec($phpStart, array(STARTBASEPATH . "/lib/Swoole/shell/start.php", $cmd, $name)); //拉起server StartLogTimer(__LINE__ . ' ' . $phpStart . ' ' . STARTBASEPATH . '/lib/Swoole/shell/start.php ' . $cmd . ' ' . $name); }, false); $pid = $process->start(); $exeRet = swoole_process::wait(); if ($exeRet['code']) { //创建失败 StartLog(" startall [31;40m [FAIL] [0m" . PHP_EOL); return false; } else { StartLog(" startall [31;40m [SUCCESS] [0m" . PHP_EOL); return true; } }
public function createStatsWorker($objAha, $workerNum) { $process = null; $processNum = 0; do { $worker = new \Daemon\Process\Stats($objAha); $process = new \swoole_process(array($worker, 'create')); $workerPid = $process->start(); $this->_stats_workers[$workerPid] = $process; $this->_initPipeEvents($process, self::WORKER_TYPE_STATS); } while (++$processNum < $workerNum); return $process; }
public static function createTaskProcess($id, $task) { $className = $task['execute']; $reflector = new \ReflectionClass($className); if (!$reflector->implementsInterface("PHPKit\\Console\\Tasks\\ITask")) { defined('PHPKIT_RUN_DEBUG') && syslog(LOG_ERR, 'class [' . $className . '] is error'); self::stop(); } else { $process = new \swoole_process(function ($worker) use($className, $task) { $worker->name(self::$child_process_name . str_replace('\\', '_', $className)); $handler = new $className(); $handler->doing($worker, $task['args']); $worker->exit(1); }); $pid = $process->start(); self::$worker_list[$pid] = ['className' => $className, 'id' => $id, 'process' => $process, 'task' => $task]; defined('PHPKIT_RUN_DEBUG') && syslog(LOG_INFO, 'create child process success:' . $pid); } }
private function spawnCustomWorker($worker_name, $config) { $process = new \swoole_process(function (\swoole_process $worker) { $recv = $worker->pop(); $worker_config = unserialize($recv); extract($worker_config); $name = isset($this->serverConfig['server']['worker_process_name']) ? $this->serverConfig['server']['worker_process_name'] : 'ypf:swoole-worker-%d'; $processName = sprintf("{$name}:%s", 0, $worker_name); \swoole_set_process_name($processName); self::getInstance()->disPatch($config['action'], array('worker_name' => $worker_name)); }, false, false); $process->useQueue(); $pid = $process->start(); $this->worker_pid[] = $pid; $process->push(serialize(array('pid' => $pid, 'worker_name' => $worker_name, 'config' => $config))); if ($pid > 0) { echo "starting worker : {$worker_name} [ OK ]\n"; } else { echo "starting worker : {$worker_name} [ FAIL ] '" . \swoole_strerror(swoole_errno()) . "' \n"; } }
echo "------------------------------------------------------------------\n"; echo "Swoole Unit Tests. Version 1.0.0\n"; echo "Author: Han Tianfeng.\n"; echo "CopyRight: Swoole-Team.\n"; echo "------------------------------------------------------------------\n"; Console::put("extension_loaded('swoole')", !extension_loaded('swoole'), true); Console::put("swoole_get_local_ip()", !is_array(swoole_get_local_ip())); Console::put("swoole_version()", !is_string(swoole_version())); if (!class_exists('swoole_process')) { Console::put("no have swoole_process", true, true); } $server = new swoole_process(function ($process) { $php = $_SERVER['_']; return $process->exec($php, array(__DIR__ . "/../examples/server.php", 'daemon')); }, false, false); if (!$server->start()) { Console::put("Server start failed.", true, true); } usleep(200000); register_shutdown_function(function () { global $server; if (swoole_process::kill($server->pid, SIGTERM)) { Console::put("swoole_process::kill()"); $status = swoole_process::wait(); Console::put("swoole_process::wait()", !($status['pid'] == $server->pid)); } else { Console::put("swoole_process::kill()", true); } echo "------------------------------------------------------------------\n"; echo "Swoole UnitTest Finish.\n"; });
<?php $redirect_stdout = true; $process = new swoole_process('callback_function', $redirect_stdout); $worker_pid = $process->start(); echo "new worker,PID=" . $worker_pid . PHP_EOL; function callback_function($worker) { echo "workerstart PID=" . $worker->pid . "\n"; sleep(2); $worker->write("hello world!\n"); $recv = $worker->read(); echo "worker receive : {$recv} \n"; $worker->exit(0); } $ret = swoole_process::wait(); var_dump($ret); echo "Master Receive:\n" . $process->read() . PHP_EOL; $process->write("master"); $ret = swoole_process::wait(); var_dump($ret); sleep(2);
/** * 开启http服务 web api * @param $opt */ public static function params_http($opt) { if (!isset($opt["http"])) { return false; } if (isset($opt["host"]) && $opt["host"]) { self::$host = $opt["host"]; } if (isset($opt["port"]) && $opt["port"]) { self::$port = $opt["port"]; } $process = new swoole_process(array(new Main(), "http_run")); $process->start(); self::$http_server = $process; swoole_event_add($process->pipe, function ($pipe) use($process) { $manager = new Manager(); $recv = $process->read(); $recv = explode("#@#", $recv); $function = $recv[0] . "_cron"; $process->write(json_encode($manager->{$function}(json_decode($recv[1], true)))); }); return true; }
<?php $table = new swoole_table(1024); $table->column('id', swoole_table::TYPE_INT, 4); //1,2,4,8 $table->column('name', swoole_table::TYPE_STRING, 64); $table->column('num', swoole_table::TYPE_FLOAT); $table->create(); $worker = new swoole_process('child1', false, false); $worker->start(); //child function child1($worker) { global $table; $table->set('*****@*****.**', array('id' => 145, 'name' => 'rango', 'num' => 3.1415)); $table->set('*****@*****.**', array('id' => 358, 'name' => "Rango1234", 'num' => 3.1415)); $table->set('*****@*****.**', array('id' => 189, 'name' => 'rango3', 'num' => 3.1415)); sleep(100000); } //master sleep(1); $s = microtime(true); for ($i = 0; $i < 1000; $i++) { $arr = $table->get('*****@*****.**'); } echo "use: " . (microtime(true) - $s) * 1000 . "ms\n"; //var_dump($table->get('*****@*****.**')); sleep(100000);
function create_process() { $process = new swoole_process("process_run"); $process->start(); }
/** * 创建子进程 * */ public function create_process($task) { $this->task = $task; $process = new swoole_process(array($this, 'run'), true); $pid = $process->start(); }
<?php const WORK_NUM = 250; for ($i = 0; $i < WORK_NUM; $i++) { $process = new swoole_process(function ($worker) { $worker->exec("/usr/bin/php", array("/mnt/hgfs/work/swoole/swoole_task/chat_room/client.php")); }); $process->start(); } for ($i = 0; $i < WORK_NUM; $i++) { swoole_process::wait(); // 回收结束运行的子进程 }
public function eventAction() { $context_option['socket']['backlog'] = 1024; $context = stream_context_create($context_option); SwooleController::$socket = stream_socket_server('tcp://192.168.80.140:9021', $errno = 0, $errmsg = '', STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context); // 尝试打开tcp的keepalive,关闭TCP Nagle算法 if (function_exists('socket_import_stream')) { $s = socket_import_stream(SwooleController::$socket); @socket_set_option($s, SOL_SOCKET, SO_KEEPALIVE, 1); @socket_set_option($s, SOL_SOCKET, TCP_NODELAY, 1); } stream_set_blocking(SwooleController::$socket, 0); #$socket = System_Socket::create(AF_INET,SOCK_STREAM,0); #SwooleController::$socket = $socket; /*$socket->bind('127.0.0.1',9021); $socket->listen(1024); #print_r($socket->listenfd()); SwooleController::$socket = $socket; SwooleController::$socket->setBlocking(false); */ echo "Master: parent, PID=" . posix_getpid() . "\n"; $workers = array(); $worker_num = 1; $worker_last = 0; function callback_function(swoole_process $worker) { echo "Worker: start. PID={$worker->pid}.\n"; echo "Worker: pipe={$worker->pipe}\n"; SwooleController::$event_base = event_base_new(); SwooleController::$event = event_new(); $GLOBALS['worker'] = $worker; function do_write($fd, $what, $arg) { SwooleController::$size--; $len = fwrite($fd, SwooleController::$send_str); event_del(SwooleController::$write_event[$arg]); unset(SwooleController::$write_event[$arg]); unset(SwooleController::$read_event[$arg]); fclose($fd); } function do_read($fd, $what, $arg) { $recv_buf = ''; while (1) { $buffer = fread($fd, 8192); #echo "123\n"; if ($buffer === '' || $buffer === false) { break; } $recv_buf .= $buffer; } #echo 'I have received that : '.$recv_buf; #fwrite(SwooleController::$client, " OK\n"); $write_event = event_new(); SwooleController::$write_event[$arg] = $write_event; event_set(SwooleController::$write_event[$arg], $fd, EV_WRITE | EV_PERSIST, 'do_write', $arg); event_base_set(SwooleController::$write_event[$arg], SwooleController::$event_base); event_add(SwooleController::$write_event[$arg]); #fclose(SwooleController::$client); event_del(SwooleController::$read_event[$arg]); } function do_accept($fd, $what, $arg) { $res = $GLOBALS['worker']->read(); #echo $res; $client = @stream_socket_accept(SwooleController::$socket, 0); stream_set_blocking($client, 0); $recv = $GLOBALS['worker']->write('0'); $read_event = event_new(); $idx = intval($read_event); #SwooleController::$client[$idx] = $client; SwooleController::$read_event[$idx] = $read_event; #print_r(SwooleController::$read_event); event_set(SwooleController::$read_event[$idx], $client, EV_READ | EV_PERSIST, 'do_read', $idx); event_base_set(SwooleController::$read_event[$idx], SwooleController::$event_base); event_add(SwooleController::$read_event[$idx]); /*$message= fread(SwooleController::$client, 8192); echo 'I have received that : '.$message; fwrite(SwooleController::$client, " OK\n"); fclose(SwooleController::$client);*/ #event_del(SwooleController::$event); } event_set(SwooleController::$event, $worker->pipe, EV_READ | EV_PERSIST, 'do_accept'); event_base_set(SwooleController::$event, SwooleController::$event_base); event_add(SwooleController::$event); event_base_loop(SwooleController::$event_base); } $event_base = event_base_new(); function do_listen_restart($pipe) { $res = SwooleController::$workers_pipe[$pipe]->read(); #echo $pipe."\n"; SwooleController::$stop = 0; } for ($i = 0; $i < SwooleController::$worker_num; $i++) { $process = new swoole_process('callback_function', false, true); $pid = $process->start(); SwooleController::$workers[$i] = $process; echo "Master: new worker, PID={$pid}\n"; SwooleController::$workers_pipe[$process->pipe] = $process; SwooleController::$restart_event[$i] = event_new(); event_set(SwooleController::$restart_event[$i], $process->pipe, EV_READ | EV_PERSIST, 'do_listen_restart'); event_base_set(SwooleController::$restart_event[$i], $event_base); event_add(SwooleController::$restart_event[$i]); /*swoole_event_add($process->pipe,function($pipe){ $read = SwooleController::$workers_pipe[$pipe]->read(); SwooleController::$stop = 0; });*/ } function do_dispatch() { if (!SwooleController::$stop) { #print_r('___'.SwooleController::$socket."\n"); $w_i = (SwooleController::$worker_last + 1) % SwooleController::$worker_num; SwooleController::$worker_last = $w_i; SwooleController::$workers[$w_i]->write('c'); SwooleController::$stop = 1; } } $event = event_new(); event_set($event, SwooleController::$socket, EV_READ | EV_PERSIST, 'do_dispatch'); event_base_set($event, $event_base); event_add($event); /*swoole_event_add(SwooleController::$socket,function ($fd){ #print_r("stop--->>>>".SwooleController::$stop."\n"); if (!SwooleController::$stop){ #print_r('___'.SwooleController::$socket."\n"); $w_i = (SwooleController::$worker_last+1)%SwooleController::$worker_num; SwooleController::$worker_last = $w_i; SwooleController::$workers[$w_i]->write('c'); SwooleController::$stop = 1; }else { #print_r("pipe_read_start\n"); #$read = SwooleController::$workers[SwooleController::$worker_last]->read(); #print_r("pipe_read--->>>>".$read."\n"); #SwooleController::$stop = $read; #echo 123; } #swoole_event_del($fd); });*/ event_base_loop($event_base); //swoole_event_wait(); swoole_process::wait(); }