You've already forked qlg.tsgz.moe
142 lines
3.6 KiB
PHP
Executable File
142 lines
3.6 KiB
PHP
Executable File
<?php
|
|
class G
|
|
{
|
|
static $serv;
|
|
private static $buffers = array();
|
|
|
|
/**
|
|
* @param $fd
|
|
* @return swoole_buffer
|
|
*/
|
|
static function getBuffer($fd, $create = true)
|
|
{
|
|
if (!isset(self::$buffers[$fd]))
|
|
{
|
|
if (!$create)
|
|
{
|
|
return false;
|
|
}
|
|
self::$buffers[$fd] = new swoole_buffer(1024 * 128);
|
|
}
|
|
return self::$buffers[$fd];
|
|
}
|
|
}
|
|
|
|
$config = array(
|
|
//'worker_num' => 4,
|
|
//'open_eof_check' => true,
|
|
//'package_eof' => "\r\n",
|
|
// 'task_ipc_mode' => 2,
|
|
'task_worker_num' => 2,
|
|
'user' => 'www',
|
|
'group' => 'www',
|
|
'chroot' => '/opt/tmp',
|
|
//'task_ipc_mode' => 1,
|
|
//'dispatch_mode' => 1,
|
|
//'log_file' => '/tmp/swoole.log',
|
|
'heartbeat_check_interval' => 300,
|
|
'heartbeat_idle_time' => 300,
|
|
// open_cpu_affinity => 1,
|
|
//'cpu_affinity_ignore' =>array(0,1)//如果你的网卡2个队列(或者没有多队列那么默认是cpu0来处理中断),并且绑定了core 0和core 1,那么可以通过这个设置避免swoole的线程或者进程绑定到这2个core,防止cpu0,1被耗光而造成的丢包
|
|
);
|
|
|
|
if (isset($argv[1]) and $argv[1] == 'daemon') {
|
|
$config['daemonize'] = true;
|
|
} else {
|
|
$config['daemonize'] = false;
|
|
}
|
|
|
|
//$mode = SWOOLE_BASE;
|
|
$mode = SWOOLE_PROCESS;
|
|
|
|
$serv = new swoole_server("0.0.0.0", 9501, $mode);
|
|
$serv->set($config);
|
|
/**
|
|
* 使用类的静态属性,可以直接访问
|
|
*/
|
|
G::$serv = $serv;
|
|
|
|
function my_onStart(swoole_server $serv)
|
|
{
|
|
global $argv;
|
|
swoole_set_process_name("php {$argv[0]}: master");
|
|
echo "MasterPid={$serv->master_pid}|Manager_pid={$serv->manager_pid}\n";
|
|
echo "Server: start.Swoole version is [".SWOOLE_VERSION."]\n";
|
|
}
|
|
|
|
function my_log($msg)
|
|
{
|
|
echo $msg.PHP_EOL;
|
|
}
|
|
|
|
function my_onShutdown($serv)
|
|
{
|
|
echo "Server: onShutdown\n";
|
|
}
|
|
|
|
function my_onClose($serv, $fd, $from_id)
|
|
{
|
|
my_log("Worker#{$serv->worker_pid} Client[$fd@$from_id]: fd=$fd is closed");
|
|
$buffer = G::getBuffer($fd);
|
|
if ($buffer)
|
|
{
|
|
$buffer->clear();
|
|
}
|
|
if($serv->exist($fd)) {
|
|
echo 'FD[' . $fd . '] exist' . PHP_EOL;
|
|
} else {
|
|
echo 'FD[' . $fd . '] not exist' . PHP_EOL;
|
|
}
|
|
}
|
|
|
|
function my_onConnect(swoole_server $serv, $fd, $from_id)
|
|
{
|
|
if($serv->exist($fd)) {
|
|
echo 'FD[' . $fd . '] exist' . PHP_EOL;
|
|
} else {
|
|
echo 'FD[' . $fd . '] not exist' . PHP_EOL;
|
|
}
|
|
}
|
|
|
|
function my_onReceive(swoole_server $serv, $fd, $from_id, $data)
|
|
{
|
|
if($serv->exist($fd)) {
|
|
echo 'FD[' . $fd . '] exist' . PHP_EOL;
|
|
} else {
|
|
echo 'FD[' . $fd . '] not exist' . PHP_EOL;
|
|
}
|
|
$serv->task($data . '-' . $fd);
|
|
}
|
|
|
|
function my_onTask(swoole_server $serv, $task_id, $from_id, $data)
|
|
{
|
|
list($str, $fd) = explode('-', $data);
|
|
if($serv->exist($fd)) {
|
|
echo 'FD[' . $fd . '] exist' . PHP_EOL ;
|
|
} else {
|
|
echo 'FD[' . $fd . '] not exist' . PHP_EOL;
|
|
}
|
|
echo "Task[PID=".$serv->worker_pid."]: task_id=$task_id.".PHP_EOL;
|
|
return $data;
|
|
}
|
|
|
|
function my_onFinish(swoole_server $serv, $task_id, $data)
|
|
{
|
|
list($str, $fd) = explode('-', $data);
|
|
$serv->send($fd, 'Send Data To FD[' . $fd . ']');
|
|
echo "Task Finish: result=" . $data . ". PID=" . $serv->worker_pid.PHP_EOL;
|
|
}
|
|
|
|
$serv->on('Start', 'my_onStart');
|
|
$serv->on('Connect', 'my_onConnect');
|
|
$serv->on('Receive', 'my_onReceive');
|
|
$serv->on('Close', 'my_onClose');
|
|
$serv->on('Shutdown', 'my_onShutdown');
|
|
$serv->on('Task', 'my_onTask');
|
|
$serv->on('Finish', 'my_onFinish');
|
|
$serv->on('ManagerStart', function($serv) {
|
|
global $argv;
|
|
swoole_set_process_name("php {$argv[0]}: manager");
|
|
});
|
|
$serv->start();
|