2019-09-06 23:53:10 +08:00

142 lines
3.6 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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防止cpu01被耗光而造成的丢包
);
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();