public function onPipeMessage(\swoole_http_server $server, $worker_id, $data) { $server->task($data); }
public function actionRun($hostinfo = '0.0.0.0:9580') { $this->parseHostPort($hostinfo); $http = new \swoole_http_server($this->host, $this->port); //初始化进程数 ,关联getTaskId函数的使用 $task_num = 0; foreach (self::$q_config as $key => $val) { self::$event_base[$key] = $task_num; self::$cnt[$key] = 0; $task_num += $val; } //初始化配置 $this->config['task_worker_num'] = $task_num; $http->set($this->config); //接受http请求参数 $http->on('request', function ($request, $response) use($http) { if (!isset($request->get['opt'])) { $response->end('HTTP_OPT_ERROR:missing opt'); return; } $opt = $request->get['opt']; if ($opt == 'put') { //获取data数据 if (isset($request->get['data'])) { $data = $request->get['data']; } elseif (isset($request->post['data'])) { $data = $request->post['data']; } else { $response->end('HTTP_PARAM_ERROR:missing data'); return; } $data = json_decode($data, true); if (json_last_error() != JSON_ERROR_NONE) { $response->end(json_last_error_msg()); return; } if (!isset($data['class']) || !isset(self::$q_config[$data['class']])) { $type = 'Common'; } else { $type = $data['class']; } $taskId = $this->getTaskId($type); if (!isset($data['task'])) { $response->end('HTTP_PARAM_ERROR:missing task'); return; } //分配给task的worker $http->task($data, $taskId); $response->end("HTTP_PUT_OK"); } elseif ($opt == 'reload') { $http->reload(); $response->end('reset now!'); return; } elseif ($opt == 'shutdown') { $http->shutdown(); $response->end('shutdown now!'); return; } else { $response->end("HTTP_OPT_ERROR:nothing to do"); return; } }); //任务调度 $http->on('Task', function ($http, $taskId, $fromId, $data) { $rs = $this->doJob($data); return $rs; }); //任务完成的响应事件 $http->on('Finish', function ($http, $taskId, $data) { echo "finish task,the result:" . $data . "\n"; }); $http->start(); }
<?php $serv = new swoole_http_server("127.0.0.1", 9501); $serv->set(array('worker_num' => 1, 'task_worker_num' => 1)); $serv->on('Request', function ($req, $resp) { $data = str_repeat('A', 8192 * 10); global $serv; $serv->task(array($data, 1000), -1, function ($serv, $task_id, $data) use($resp) { $resp->end("Task#{$task_id} finished." . PHP_EOL); }); }); $serv->on('Task', function (swoole_server $serv, $task_id, $from_id, $data) { //echo "#{$serv->worker_id}\tonTask: [PID={$serv->worker_pid}]: task_id=$task_id, data_len=".strlen($data).".".PHP_EOL; // $serv->finish($data); return $data; }); $serv->on('Finish', function (swoole_server $serv, $task_id, $data) { echo "Task#{$task_id} finished, data_len=" . strlen($data) . PHP_EOL; }); $serv->on('workerStart', function ($serv, $worker_id) { global $argv; if ($serv->taskworker) { swoole_set_process_name("php {$argv[0]}: task_worker"); } else { swoole_set_process_name("php {$argv[0]}: worker"); } }); $serv->on('workerStop', function (swoole_server $serv, $id) { echo "stop\n"; var_dump($id); });
/** * @param mixed $data */ public function asyncTask($data) { $this->server->task($data); }
define('DS', DIRECTORY_SEPARATOR); define('WORKSPACE', __DIR__); require_once WORKSPACE . DS . 'config.php'; //server init $httpServerObj = new swoole_http_server(SERVER_LISTEN_IP, SERVER_LISTEN_PORT); $httpServerObj->set($aServerSetting); $httpServerObj->on('request', function (swoole_http_request $request, swoole_http_response $response) { global $aWhiteIpList; $sIp = $request->server['remote_addr']; if (!empty($aWhiteIpList) && !in_array($sIp, $aWhiteIpList)) { $response->end('error'); return true; } global $httpServerObj; $sRequestUri = $request->server['request_uri']; $sRequestUri = trim($sRequestUri, '/'); $httpServerObj->task($sRequestUri); $response->end('ok'); }); $httpServerObj->on('Task', function (swoole_server $serverObj, $taskId, $fromId, $data) { global $aRepoConfig; if (!isset($aRepoConfig[$data])) { return true; } exec($aRepoConfig[$data]); return true; }); $httpServerObj->on('Finish', function (swoole_server $serverObj, $taskId, $data) { return true; }); $httpServerObj->start();