thinkphp5 swoole 執行非同步任務
阿新 • • 發佈:2018-12-21
<?php /* *author:hdj */ namespace app\Console; use think\console\Command; use think\console\Input; use think\console\Output; class Websocket extends Command{ protected $server; protected function configure() { $this->setName('websocket:start')->setDescription('Start Web Socket Server!'); } protected function execute(Input $input, Output $output) { $serv = new \swoole_server('0.0.0.0',9501); $serv->set(array('task_worker_num' => 4)); $serv->on('connect', function ($serv, $fd){ echo $fd."客戶端已經連線進來了.\n"; }); $serv->on('receive', function($serv, $fd, $from_id, $data) { $task_id = $serv->task($data); echo "開始投遞非同步任務 id=$task_id\n"; }); $serv->on('task', function ($serv, $task_id, $from_id, $data) { echo "接收非同步任務[id=$task_id]".PHP_EOL; for ($i = 0 ; $i<10000;$i++){ if($i%2==0){ echo 'send'.$i.' success'."\n"; }else{ echo 'send'.$i.' fail'."\n"; } sleep(1); } $serv->finish("$data -> OK"); }); $serv->on('finish', function ($serv, $task_id, $data) { echo "非同步任務[id=$task_id]完成".PHP_EOL; }); $serv->start(); } }
進入你的根目錄 執行 php think websocket:start
<?php namespace app\index\controller; use think\Controller; class Test extends Controller { public function index(){ $client = new \swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); $ret = $client->connect("23.27.127.32", 9501); if(empty($ret)){ echo 'error!connect to swoole_server failed'; } else { $client->send('blue'); } } }
服務端顯示: