Пример #1
0
 public function onWorkerStart(\swoole_server $server, $worker_id)
 {
     if ($server->taskworker) {
         swoole_set_process_name('switch_manage_task_worker');
         $server->sendMessage('worker start.', $server->worker_id - 1);
     } else {
         swoole_set_process_name('switch_manage_event_worker');
         if ($worker_id == 0) {
             //防止tick被重复启动
             $server->tick(self::INTERVAL_PING, function () use($server) {
                 $server->task('Ping');
             });
         }
     }
 }
Пример #2
0
<?php

$serv = new swoole_server("0.0.0.0", 9501);
$serv->set(array('worker_num' => 2, 'task_worker_num' => 2));
$serv->on('pipeMessage', function ($serv, $src_worker_id, $data) {
    echo "#{$serv->worker_id} message from #{$src_worker_id}: {$data}\n";
});
$serv->on('task', function ($serv, $task_id, $from_id, $data) {
    var_dump($task_id, $from_id, $data);
    $fd = $data;
    //$serv->send($fd, str_repeat('B', 1024*rand(40, 60)).rand(10000, 99999)."\n");
});
$serv->on('finish', function ($serv, $fd, $from_id) {
});
$serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data) {
    if (trim($data) == 'task') {
        $serv->task("async task coming");
    } else {
        $worker_id = 1 - $serv->worker_id;
        $serv->sendMessage("hello task process", $worker_id);
    }
});
$serv->on('close', function ($serv, $fd, $from_id) {
    //echo "[#".posix_getpid()."]\tClient@[$fd:$from_id]: Close.\n";
});
$serv->start();
Пример #3
0
<?php

$serv = new swoole_server("0.0.0.0", 9501, SWOOLE_BASE);
//$serv = new swoole_server("0.0.0.0", 9501);
$serv->set(array('worker_num' => 2, 'task_worker_num' => 2));
$serv->on('pipeMessage', function ($serv, $src_worker_id, $data) {
    echo "#{$serv->worker_id} message from #{$src_worker_id}: {$data}\n";
});
$serv->on('task', function (swoole_server $serv, $task_id, $from_id, $data) {
    echo "#{$serv->worker_id} NewTask: {$data}\n";
    $serv->sendMessage($data, 0);
    //$serv->send($fd, str_repeat('B', 1024*rand(40, 60)).rand(10000, 99999)."\n");
});
$serv->on('finish', function ($serv, $fd, $from_id) {
});
$serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data) {
    $cmd = trim($data);
    if ($cmd == 'totask') {
        $serv->sendMessage("hello task process", 2);
    } elseif ($cmd == 'toworker') {
        $worker_id = 1 - $serv->worker_id;
        $serv->sendMessage("hello worker", $worker_id);
    } elseif ($cmd == 'task2worker') {
        $serv->task('hello worker from task.');
    } else {
        echo "#{$serv->worker_id} Recv: {$data}\n";
    }
});
$serv->on('close', function ($serv, $fd, $from_id) {
    //echo "[#".posix_getpid()."]\tClient@[$fd:$from_id]: Close.\n";
});
Пример #4
0
<?php

const TASK_N = 1000;
$serv = new swoole_server("127.0.0.1", 9501, SWOOLE_BASE);
$serv->set(['worker_num' => 2]);
$serv->on('connect', function (swoole_server $serv, $fd) {
    echo "Client:Connect.\n";
    $data = str_repeat("A", 800000);
    $serv->sendMessage(array('data' => $data), 1);
});
$serv->on('pipeMessage', function ($serv, $worker_id, $data) {
    var_dump($worker_id, is_array($data));
});
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
    //echo "recv n=".strlen($data)."\n";
    //$serv->send($fd, 'Swoole: hello');
});
$serv->on('close', function ($serv, $fd) {
    echo "Client: Close.\n";
});
$serv->start();
Пример #5
0
$serv = new swoole_server("0.0.0.0", 9501, $mode, SWOOLE_SOCK_TCP);
$serv->listen('0.0.0.0', 9502, SWOOLE_SOCK_UDP);
$serv->listen('::', 9503, SWOOLE_SOCK_TCP6);
$serv->listen('::', 9504, SWOOLE_SOCK_UDP6);
$process1 = new swoole_process(function ($worker) use($serv) {
    global $argv;
    swoole_set_process_name("php {$argv[0]}: my_process1");
    swoole_timer_tick(2000, function ($interval) use($worker, $serv) {
        echo "#{$worker->pid} child process timer {$interval}\n";
        // 如果worker中没有定时器,则会输出 process timer xxx
        foreach ($serv->connections as $conn) {
            $serv->send($conn, "heartbeat\n");
        }
    });
    swoole_timer_tick(5000, function () use($serv) {
        $serv->sendMessage("hello event worker", 0);
        $serv->sendMessage("hello task worker", 4);
    });
}, false);
//$serv->addprocess($process1);
$process2 = new swoole_process(function ($worker) use($serv) {
    global $argv;
    swoole_set_process_name("php {$argv[0]}: my_process2");
    swoole_timer_tick(2000, function ($interval) use($worker, $serv) {
        echo "#{$worker->pid} child process timer {$interval}\n";
        // 如果worker中没有定时器,则会输出 process timer xxx
    });
}, false);
//$serv->addprocess($process2);
$serv->set(G::$config);
/**
Пример #6
0
 /**
  * 发送一条管道通信
  * @param \CatLib\Constraint\Network\IPacket $data 数据
  * @param bool $taskwork 是否投递到任务线程
  * @return void
  */
 public function sendMessage(IPacket $data, $taskwork = true)
 {
     $config = $this->env["swoole"]["config"];
     $target = mt_rand($taskwork ? $config["worker_num"] : 0, $taskwork ? $config["worker_num"] + ($config["task_worker_num"] - 1) : $config["worker_num"] - 1);
     $this->server->sendMessage($data->serialize(), $target);
 }