You've already forked qlg.tsgz.moe
Init Repo
This commit is contained in:
13
vendor/swoole/examples/process/alarm.php
vendored
Executable file
13
vendor/swoole/examples/process/alarm.php
vendored
Executable file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
swoole_process::signal(SIGALRM, function ()
|
||||
{
|
||||
static $i = 0;
|
||||
echo "#{$i}\talarm\n";
|
||||
$i++;
|
||||
if ($i > 20)
|
||||
{
|
||||
swoole_process::alarm(-1);
|
||||
}
|
||||
});
|
||||
|
||||
swoole_process::alarm(100 * 1000);
|
41
vendor/swoole/examples/process/async_master.php
vendored
Executable file
41
vendor/swoole/examples/process/async_master.php
vendored
Executable file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
$workers = [];
|
||||
$worker_num = 10;
|
||||
|
||||
//swoole_process::daemon(0, 1);
|
||||
|
||||
function onReceive($pipe) {
|
||||
global $workers;
|
||||
$worker = $workers[$pipe];
|
||||
$data = $worker->read();
|
||||
echo "RECV: " . $data;
|
||||
}
|
||||
|
||||
//循环创建进程
|
||||
for($i = 0; $i < $worker_num; $i++)
|
||||
{
|
||||
$process = new swoole_process(function(swoole_process $process) {
|
||||
$i = 1;
|
||||
while($i++)
|
||||
{
|
||||
$process->write("Worker#{$process->id}: hello master\n");
|
||||
if ($i > 5 and $process->id == 1) $process->exit();
|
||||
sleep(1);
|
||||
}
|
||||
});
|
||||
$process->id = $i;
|
||||
$pid = $process->start();
|
||||
$workers[$process->pipe] = $process;
|
||||
}
|
||||
|
||||
swoole_process::signal(SIGCHLD, function(){
|
||||
//表示子进程已关闭,回收它
|
||||
$status = swoole_process::wait();
|
||||
echo "Worker#{$status['pid']} exit\n";
|
||||
});
|
||||
|
||||
//将子进程的管道加入EventLoop
|
||||
foreach($workers as $process)
|
||||
{
|
||||
swoole_event_add($process->pipe, 'onReceive');
|
||||
}
|
20
vendor/swoole/examples/process/client.php
vendored
Executable file
20
vendor/swoole/examples/process/client.php
vendored
Executable file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
$client = new swoole_client(SWOOLE_SOCK_TCP);
|
||||
|
||||
if (!$client->connect('127.0.0.1', 8089, -1))
|
||||
{
|
||||
exit("connect failed. Error: {$client->errCode}\n");
|
||||
}
|
||||
|
||||
function _send(swoole_client $client, $data)
|
||||
{
|
||||
return $client->send(pack('N', strlen($data)) . $data);
|
||||
}
|
||||
|
||||
var_dump($client->getsockname());
|
||||
|
||||
|
||||
_send($client, "hello world");
|
||||
_send($client, "hello world [2]");
|
||||
|
||||
$client->close();
|
7
vendor/swoole/examples/process/client3.php
vendored
Executable file
7
vendor/swoole/examples/process/client3.php
vendored
Executable file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
$fp = stream_socket_client("tcp://127.0.0.1:8089", $errno, $errstr) or die("error: $errstr\n");
|
||||
$msg = json_encode(['data' => 'hello', 'uid' => 1991]);
|
||||
fwrite($fp, pack('N', strlen($msg)) . $msg);
|
||||
sleep(1);
|
||||
var_dump(fread($fp, 8192));
|
||||
fclose($fp);
|
17
vendor/swoole/examples/process/close.php
vendored
Executable file
17
vendor/swoole/examples/process/close.php
vendored
Executable file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
$process = new swoole_process(function (swoole_process $worker)
|
||||
{
|
||||
echo "Worker: start. PID=" . $worker->pid . "\n";
|
||||
sleep(2);
|
||||
$worker->close(swoole_process::PIPE_READ);
|
||||
$worker->write("hello master\n");
|
||||
$worker->exit(0);
|
||||
}, false);
|
||||
|
||||
$pid = $process->start();
|
||||
$r = array($process);
|
||||
$w = array();
|
||||
$e = array();
|
||||
$ret = swoole_select($r, $w, $e, 1.0);
|
||||
var_dump($ret);
|
||||
var_dump($process->read());
|
7
vendor/swoole/examples/process/echo.py
vendored
Executable file
7
vendor/swoole/examples/process/echo.py
vendored
Executable file
@ -0,0 +1,7 @@
|
||||
import sys
|
||||
|
||||
def main():
|
||||
s = raw_input()
|
||||
print "Python:" + s
|
||||
|
||||
main()
|
16
vendor/swoole/examples/process/exec.php
vendored
Executable file
16
vendor/swoole/examples/process/exec.php
vendored
Executable file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
$process = new swoole_process('callback_function', true);
|
||||
$pid = $process->start();
|
||||
|
||||
function callback_function(swoole_process $worker)
|
||||
{
|
||||
$worker->exec('/usr/local/bin/php', array(__DIR__.'/stdin_stdout.php'));
|
||||
}
|
||||
|
||||
echo "From Worker: ".$process->read();
|
||||
$process->write("hello worker\n");
|
||||
echo "From Worker: ".$process->read();
|
||||
|
||||
$ret = swoole_process::wait();
|
||||
var_dump($ret);
|
||||
|
43
vendor/swoole/examples/process/func_timeout.php
vendored
Executable file
43
vendor/swoole/examples/process/func_timeout.php
vendored
Executable file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
declare(ticks = 1);
|
||||
Swoole\Async::set([
|
||||
'enable_signalfd' => false,
|
||||
]);
|
||||
|
||||
class FunctionTimeoutException extends RuntimeException
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
function test()
|
||||
{
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
$serv = new Swoole\Http\Server("127.0.0.1", 9502);
|
||||
|
||||
$serv->set(['worker_num' => 1]);
|
||||
|
||||
$serv->on('WorkerStart', function($serv, $workerId) {
|
||||
pcntl_signal(SIGALRM, function () {
|
||||
Swoole\Process::alarm(-1);
|
||||
throw new FunctionTimeoutException;
|
||||
});
|
||||
});
|
||||
|
||||
$serv->on('Request', function($request, $response) {
|
||||
try
|
||||
{
|
||||
Swoole\Process::alarm(100 * 1000);
|
||||
test();
|
||||
Swoole\Process::alarm(-1);
|
||||
$response->end("<h1>Finish</h1>");
|
||||
}
|
||||
catch(FunctionTimeoutException $e)
|
||||
{
|
||||
$response->end("<h1>Timeout</h1>");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$serv->start();
|
45
vendor/swoole/examples/process/msgqueue.php
vendored
Executable file
45
vendor/swoole/examples/process/msgqueue.php
vendored
Executable file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
$workers = [];
|
||||
$worker_num = 2;
|
||||
|
||||
for($i = 0; $i < $worker_num; $i++)
|
||||
{
|
||||
$process = new swoole_process('callback_function', false, false);
|
||||
$process->useQueue();
|
||||
$pid = $process->start();
|
||||
$workers[$pid] = $process;
|
||||
//echo "Master: new worker, PID=".$pid."\n";
|
||||
}
|
||||
|
||||
function callback_function(swoole_process $worker)
|
||||
{
|
||||
//echo "Worker: start. PID=".$worker->pid."\n";
|
||||
//recv data from master
|
||||
while(true)
|
||||
{
|
||||
$recv = $worker->pop();
|
||||
echo "From Master: $recv\n";
|
||||
}
|
||||
|
||||
sleep(2);
|
||||
$worker->exit(0);
|
||||
}
|
||||
|
||||
while(true)
|
||||
{
|
||||
/**
|
||||
* @var $process swoole_process
|
||||
*/
|
||||
$pid = array_rand($workers);
|
||||
$process = $workers[$pid];
|
||||
$process->push("hello worker[$pid]\n");
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
for($i = 0; $i < $worker_num; $i++)
|
||||
{
|
||||
$ret = swoole_process::wait();
|
||||
$pid = $ret['pid'];
|
||||
unset($workers[$pid]);
|
||||
echo "Worker Exit, PID=".$pid.PHP_EOL;
|
||||
}
|
36
vendor/swoole/examples/process/msgqueue2.php
vendored
Executable file
36
vendor/swoole/examples/process/msgqueue2.php
vendored
Executable file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
function callback_function(swoole_process $worker)
|
||||
{
|
||||
//echo "Worker: start. PID=".$worker->pid."\n";
|
||||
//recv data from master
|
||||
while(true)
|
||||
{
|
||||
$recv = $worker->pop();
|
||||
echo "From Master: $recv\n";
|
||||
}
|
||||
|
||||
sleep(2);
|
||||
$worker->exit(0);
|
||||
}
|
||||
|
||||
$process = new swoole_process('callback_function', false, false);
|
||||
$process->useQueue(ftok(__FILE__, 1), 2 | swoole_process::IPC_NOWAIT);
|
||||
|
||||
$send_bytes = 0;
|
||||
foreach(range(1, 10) as $i)
|
||||
{
|
||||
$data = str_repeat('A', 65535);
|
||||
// $data = "hello worker[$i]\n";
|
||||
$send_bytes += strlen($data);
|
||||
$process->push($data);
|
||||
}
|
||||
|
||||
$recv_bytes = 0;
|
||||
$r_data = true;
|
||||
while($r_data)
|
||||
{
|
||||
$r_data = $process->pop();
|
||||
$recv_bytes += $r_data;
|
||||
}
|
||||
echo "send={$send_bytes}, recv=$recv_bytes\n";
|
||||
var_dump($process->statQueue());
|
14
vendor/swoole/examples/process/msgqueue_client.php
vendored
Executable file
14
vendor/swoole/examples/process/msgqueue_client.php
vendored
Executable file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
$mq = new Swoole\MsgQueue(0x7000001);
|
||||
for ($i = 0; $i < 1000; $i++)
|
||||
{
|
||||
if ($i % 100 == 99)
|
||||
{
|
||||
var_dump($mq->stats());
|
||||
}
|
||||
elseif ($i % 300 == 299)
|
||||
{
|
||||
sleep(1);
|
||||
}
|
||||
$mq->push("hello $i");
|
||||
}
|
16
vendor/swoole/examples/process/msgqueue_pool.php
vendored
Executable file
16
vendor/swoole/examples/process/msgqueue_pool.php
vendored
Executable file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
$pool = new Swoole\Process\Pool(2, SWOOLE_IPC_MSGQUEUE, 0x7000001);
|
||||
|
||||
$pool->on("Message", function ($pool, $message) {
|
||||
echo "Message: {$message}\n";
|
||||
});
|
||||
|
||||
$pool->on("WorkerStart", function ($pool, $workerId) {
|
||||
echo "Worker#{$workerId} is started\n";
|
||||
});
|
||||
|
||||
$pool->on("WorkerStop", function ($pool, $workerId) {
|
||||
echo "Worker#{$workerId} is stopped\n";
|
||||
});
|
||||
|
||||
$pool->start();
|
13
vendor/swoole/examples/process/pool_socket.php
vendored
Executable file
13
vendor/swoole/examples/process/pool_socket.php
vendored
Executable file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
$pool = new Swoole\Process\Pool(2, SWOOLE_IPC_SOCKET);
|
||||
|
||||
$pool->on("Message", function ($pool, $message) {
|
||||
echo "Message: {$message}\n";
|
||||
$pool->write("hello ");
|
||||
$pool->write("world ");
|
||||
$pool->write("\n");
|
||||
});
|
||||
|
||||
$pool->listen('127.0.0.1', 8089);
|
||||
|
||||
$pool->start();
|
15
vendor/swoole/examples/process/python.php
vendored
Executable file
15
vendor/swoole/examples/process/python.php
vendored
Executable file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$process = new swoole_process('pyhon_process', true);
|
||||
$pid = $process->start();
|
||||
|
||||
function pyhon_process(swoole_process $worker)
|
||||
{
|
||||
$worker->exec('/usr/bin/python', array("echo.py"));
|
||||
}
|
||||
|
||||
$process->write("hello world\n");
|
||||
echo $process->read();
|
||||
|
||||
$ret = swoole_process::wait();
|
||||
var_dump($ret);
|
||||
|
14
vendor/swoole/examples/process/select.php
vendored
Executable file
14
vendor/swoole/examples/process/select.php
vendored
Executable file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
$process = new swoole_process(function (swoole_process $worker)
|
||||
{
|
||||
echo "Worker: start. PID=" . $worker->pid . "\n";
|
||||
sleep(2);
|
||||
$worker->write("hello master\n");
|
||||
$worker->exit(0);
|
||||
}, false);
|
||||
|
||||
$pid = $process->start();
|
||||
$r = array($process);
|
||||
$ret = swoole_select($r, null, null, 1.0);
|
||||
var_dump($ret);
|
||||
var_dump($process->read());
|
4
vendor/swoole/examples/process/stdin_stdout.php
vendored
Executable file
4
vendor/swoole/examples/process/stdin_stdout.php
vendored
Executable file
@ -0,0 +1,4 @@
|
||||
<?php
|
||||
fwrite(STDOUT, "Hello master.\n");
|
||||
fwrite(STDOUT, "Master write: ".fgets(STDIN)."\n");
|
||||
|
8
vendor/swoole/examples/process/test.php
vendored
Executable file
8
vendor/swoole/examples/process/test.php
vendored
Executable file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
swoole_process::daemon();
|
||||
|
||||
while (1)
|
||||
{
|
||||
echo "hello";
|
||||
sleep(1);
|
||||
}
|
106
vendor/swoole/examples/process/worker.php
vendored
Executable file
106
vendor/swoole/examples/process/worker.php
vendored
Executable file
@ -0,0 +1,106 @@
|
||||
<?php
|
||||
$redirect_stdout = false;
|
||||
$workers = [];
|
||||
$worker_num = 1;
|
||||
|
||||
//swoole_process::daemon(0, 1);
|
||||
for($i = 0; $i < $worker_num; $i++)
|
||||
{
|
||||
$process = new swoole_process('child_async', $redirect_stdout);
|
||||
$process->id = $i;
|
||||
$pid = $process->start();
|
||||
$workers[$pid] = $process;
|
||||
//echo "Master: new worker, PID=".$pid."\n";
|
||||
}
|
||||
|
||||
master_async($workers);
|
||||
//master_sync($workers);
|
||||
|
||||
//异步主进程
|
||||
function master_async($workers)
|
||||
{
|
||||
swoole_process::signal(SIGCHLD, function ($signo) use (&$workers) {
|
||||
while(1)
|
||||
{
|
||||
$ret = swoole_process::wait(false);
|
||||
if ($ret)
|
||||
{
|
||||
$pid = $ret['pid'];
|
||||
$child_process = $workers[$pid];
|
||||
//unset($workers[$pid]);
|
||||
echo "Worker Exit, kill_signal={$ret['signal']} PID=" . $pid . PHP_EOL;
|
||||
$new_pid = $child_process->start();
|
||||
$workers[$new_pid] = $child_process;
|
||||
unset($workers[$pid]);
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @var $process swoole_process
|
||||
*/
|
||||
foreach($workers as $pid => $process)
|
||||
{
|
||||
swoole_event_add($process->pipe, function($pipe) use ($process) {
|
||||
$recv = $process->read();
|
||||
if ($recv) echo "From Worker: " . $recv;
|
||||
$process->write("HELLO worker {$process->pid}\n");
|
||||
});
|
||||
$process->write("hello worker[$pid]\n");
|
||||
}
|
||||
}
|
||||
|
||||
//同步主进程
|
||||
function master_sync($workers)
|
||||
{
|
||||
foreach($workers as $pid => $process)
|
||||
{
|
||||
$process->write("hello worker[$pid]\n");
|
||||
echo "From Worker: ".$process->read();
|
||||
}
|
||||
}
|
||||
|
||||
function child_sync(swoole_process $worker)
|
||||
{
|
||||
//echo "Worker: start. PID=".$worker->pid."\n";
|
||||
//recv data from master
|
||||
$recv = $worker->read();
|
||||
|
||||
echo "From Master: $recv\n";
|
||||
|
||||
//send data to master
|
||||
$worker->write("hello master\n");
|
||||
|
||||
sleep(2);
|
||||
$worker->exit(0);
|
||||
}
|
||||
|
||||
function child_async(swoole_process $worker)
|
||||
{
|
||||
//echo "Worker: start. PID=".$worker->pid."\n";
|
||||
//recv data from master
|
||||
$GLOBALS['worker'] = $worker;
|
||||
global $argv;
|
||||
$worker->name("{$argv[0]}: worker #".$worker->id);
|
||||
|
||||
swoole_process::signal(SIGTERM, function($signal_num) use ($worker) {
|
||||
echo "signal call = $signal_num, #{$worker->pid}\n";
|
||||
});
|
||||
|
||||
// swoole_timer_tick(2000, function () use ($worker)
|
||||
// {
|
||||
// if (rand(1, 3) % 2) {
|
||||
// $worker->write("hello master {$worker->pid}\n");
|
||||
// }
|
||||
// });
|
||||
|
||||
swoole_event_add($worker->pipe, function($pipe) use($worker) {
|
||||
$recv = $worker->read();
|
||||
echo "From Master: $recv\n";
|
||||
//$worker->write("hello master\n");
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user