public function onReceive(swoole_client $cli, $data) { Trace::debug("*********cli {$this->fd} receive lenght:" . strlen($data) . "."); false !== $this->serv->connection_info($this->fd) && $this->serv->send($this->fd, $this->cryptor->encrypt($data)); $this->lock = false; $this->send(); }
public function onReceive(swoole_server $server, $fd, $from_id, $data) { if (empty($data)) { // 发送数据给客户端,请求包错误 $data = array('code' => 500, 'msg' => '非法请求', 'data' => null); $server->send($fd, json_encode($data)); } //局域网管理 $udpClient = $server->connection_info($fd, $from_id); if ($udpClient['server_port'] == '9502') { $data = str_replace("\r\n\r\n", "", $data); switch ($data) { case 'stop': echo '服务器关闭: ' . date('Y-m-d H:i:s') . PHP_EOL; $server->shutdown(); $server->send($fd, '服务器关闭成功'); break; case 'reload': echo 'Worker进程重启: ' . date('Y-m-d H:i:s') . PHP_EOL; $server->reload(); $server->send($fd, '服务器Worker重启成功'); break; default: $server->send($fd, '非法请求'); break; } } else { $data = json_decode($data, true); echo $data['name'] . " say hello " . Test::WORD . "\n"; $server->send($fd, $data['name'] . " say hello " . Test::WORD); } }
public function onConnect(swoole_server $serv, $fd, $from_id) { //获取连接的客户端信息 $fdInfo = $serv->connection_info($fd); echo '<pre>'; print_r($fdInfo); echo '</pre>'; $serv->send($fd, "Welcome {$fd} Connect Server"); }
public function onReceive(swoole_server $serv, $fd, $from_id, $data) { $info = $serv->connection_info($fd, $from_id); if ($info['server_port'] == 9502) { $serv->send($fd, "welcom Admin \n"); } else { $serv->send($fd, 'Swoole:' . $data); } }
/** * @param $serv * @param $fd * @param $from_id * @param $data */ function onPackage(\swoole_server $serv, $fd, $from_id, $data) { $conn = $serv->connection_info($fd, $from_id); if ($conn['from_port'] == self::SVR_PORT_LOG) { $pkg = unpack('Nmodule_id/Ninterface_id/Nspecial_id/Nuser_id/Clevel/Ntime', $data); if ($pkg == false) { $this->log("error package. data" . $data); return; } $pkg['client_ip'] = $conn['remote_ip']; $pkg['txt'] = substr($data, 21); $tmp = $pkg; $tmp['cmd'] = 'server'; $this->cli->send(json_encode($tmp)); $this->redis->sAdd($pkg['module_id'] . "_" . $pkg['interface_id'], $pkg['client_ip']); if (time() >= strtotime($this->tomorrow . ' ' . '00:00:00')) { $this->log_table = 'logs_' . $this->tomorrow; } table($this->log_table)->put($pkg); } }
function onReceive(\swoole_server $serv, $fd, $from_id, $data) { $this->fd = $fd; $_key = explode(' ', trim($data)); if (count($_key) != 3) { return; } //模调系统,自动创建接口 if ($_key[0] == 'GET') { $this->clientInfo = $serv->connection_info($fd); $key = $this->getInterfaceId($_key[1], $_key[2]); $this->serv->send($fd, strval($key)); } elseif ($_key[0] == 'CONFIG') { $key = $this->getConfig($_key[1], $_key[2]); $this->serv->send($fd, $key . self::EOF); } elseif ($_key[0] == 'REPORT') { $serverIp = $_key[1]; $serviceName = $_key[2]; } else { $this->serv->send($fd, "unkown" . self::EOF); } }
public function OnTask(\swoole_server &$server, &$task_id, &$from_id, &$param) { /* @var $handler \DIServer\Handler */ $handler = DIHandler($param['handlerID'])[$param['handlersKey']]; if (!$handler) { DILog("Calling On not exist HandlerID " . $param['handlerID'] . "."); return; } $info = $server->connection_info($data['fd'], $from_id); $param['taskID'] = $task_id; $param['fromID'] = $from_id; $param['server'] =& $server; G('HandlerStart'); $handler->__BeforeRun($param); $handler->Run($param); $handler->__AfterRun($param); G('HandlerEnd'); $timeUsed = G('HandlerStart', 'HandlerEnd'); if ($timeUsed >= C('HANDLER_SLOW_CHECK')) { $handler->SlowLog($param); //允许用户自定义慢处理参数日志 DILog(get_class($handler) . " use " . $timeUsed . "s on task {$task_id}", 'w'); } }
<?php $serv = new swoole_server("::1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP6); $serv->set(array('worker_num' => 1)); $serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data) { echo "[#" . posix_getpid() . "]\tClient[{$fd}]: {$data}\n"; var_dump($serv->connection_info($fd, $from_id)); $serv->send($fd, json_encode(array("hello" => '1213', "bat" => "ab"))); //$serv->close($fd); }); $serv->start();
/** * @param $serv * @param $fd * @param $from_id * @param $data */ function onPackage(\swoole_server $serv, $fd, $from_id, $data) { $conn = $serv->connection_info($fd, $from_id); /** *typedef struct { int32_t interface_id; //接口ID int32_t module_id; //模块ID int8_t success; //成功或失败 int32_t ret_code; //返回码 int32_t server_ip; //服务器端IP int32_t millisecond; //调用耗时单位毫秒 int32_t time; //时间单位秒 } module_stats; */ $n = strlen($data) / self::STATS_PKG_LEN; if (is_float($n)) { $this->log("error udp pacakge size[" . strlen($data) . "]. data={$data}"); return; } for ($i = 0; $i < $n; $i++) { $pkg_data = substr($data, $i * self::STATS_PKG_LEN, self::STATS_PKG_LEN); $this->parseStatsPackage($conn['remote_ip'], $pkg_data); } }
<?php $serv = new swoole_server("::1", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP6); $serv->set(array('worker_num' => 1)); $serv->on('connect', function ($serv, $fd, $from_id) { echo "[#" . posix_getpid() . "]\tClient@[{$fd}:{$from_id}]: Connect.\n"; }); $serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data) { echo "[#" . posix_getpid() . "]\tClient[{$fd}]: {$data}\n"; var_dump($serv->connection_info($fd)); $serv->send($fd, json_encode(array("hello" => '1213', "bat" => "ab"))); //$serv->close($fd); }); $serv->on('close', function ($serv, $fd, $from_id) { echo "[#" . posix_getpid() . "]\tClient@[{$fd}:{$from_id}]: Close.\n"; }); $serv->start();
function connection_info($fd) { return $this->sw->connection_info($fd); }
<?php $clientcount = 0; $serv = new swoole_server("0.0.0.0", 10000); echo "BenchServer v 0.1 By 709653949@qq.com admin at 10000 start ....\n"; $serv->set(array('worker_num' => 1, 'daemonize' => false)); $serv->on('connect', function ($serv, $fd) { global $clientcount; $fdinfo = $serv->connection_info($fd); $clientcount++; $clientinfo = "Client ip:" . $fdinfo["remote_ip"] . " port:" . $fdinfo["remote_port"] . " to fromport:" . $fdinfo["from_port"] . " Connected! count=" . $clientcount . "\n"; echo $clientinfo; }); $serv->on('receive', function ($serv, $fd, $from_id, $data) { $info = $serv->connection_info($fd, $from_id); }); $serv->on('close', function ($serv, $fd) { global $clientcount; $fdinfo = $serv->connection_info($fd); $clientcount--; $clientinfo = "Client ip:" . $fdinfo["remote_ip"] . " port:" . $fdinfo["remote_port"] . " Closed.......\n"; echo $clientinfo; }); $serv->start();
/** * 对外提供接口 * * @param $server swoole_server对象 * @param $fd TCP客户端连接的文件描述符 * @param $from_id TCP连接所在的Reactor线程ID * @param $data 收到的数据内容 */ public function onReceive(swoole_server $server, $fd, $from_id, $data) { if (empty($data)) { // 发送数据给客户端,请求包错误 $data = array('code' => 500, 'msg' => '非法请求', 'data' => null); $server->send($fd, json_encode($data)); } //局域网管理 $udpClient = $server->connection_info($fd, $from_id); if ($udpClient['server_port'] == '9504') { echo $data . PHP_EOL; switch ($data) { case 'stop': echo '服务器关闭: ' . date('Y-m-d H:i:s') . PHP_EOL; $server->shutdown(); $server->send($fd, '服务器关闭成功'); break; case 'reload': echo 'Worker进程重启: ' . date('Y-m-d H:i:s') . PHP_EOL; $server->reload(); $server->send($fd, '服务器Worker重启成功'); break; default: $server->send($fd, '非法请求'); break; } } else { $data = json_decode($data, true); //任务数据 $list = $data['list']; //请求类型 $type = $data['type']; switch ($type) { //添加定时器 case 'add': //添加定时器 $timeInterval = $list['s_interval']; $taskId = $list['s_id']; $timerId = $server->tick($timeInterval, array($this, 'onTimer'), $list); //更新任务 Task::updateTimer($taskId, $timerId); $data = array('code' => 200, 'msg' => '添加定时器成功', 'data' => null); $server->send($fd, json_encode($data)); break; //修改定时器 //修改定时器 case 'edit': //修改url,定时器间隔时间 $data = array('code' => 200, 'msg' => '修改定时器成功', 'data' => null); $server->send($fd, json_encode($data)); break; //删除定时器 //删除定时器 case 'del': echo '删除定时器: ' . date('Y-m-d H:i:s') . PHP_EOL; //任务ID $taskId = $list['s_id']; //定时器ID $timerId = $list['s_timerId']; //删除定时器 swoole_timer_clear($timerId); //删除任务 Task::delTask($taskId); $data = array('code' => 200, 'msg' => '删除定时器成功', 'data' => null); $server->send($fd, json_encode($data)); break; default: $data = array('code' => 500, 'msg' => '非法请求', 'data' => null); $server->send($fd, json_encode($data)); break; } } }
//$serv->addtimer(1000); }); $serv->on('workerStart', function ($serv, $worker_id) { echo "{$worker_id} start" . PHP_EOL; //if($worker_id == 0) $serv->addtimer(1000); }); $serv->on('connect', function ($serv, $fd, $from_id) { //echo "[#".posix_getpid()."]\tClient@[$fd:$from_id]: Connect.\n"; echo "{$fd} connect, worker:" . $serv->worker_id . PHP_EOL; }); $serv->on('task', function ($serv, $task_id, $from_id, $data) { }); $serv->on('finish', function ($serv, $fd, $from_id) { }); $serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data) { $conn = $serv->connection_info($fd); print_r($conn); echo "worker_id: " . $serv->worker_id . PHP_EOL; if (empty($conn['uid'])) { $uid = $fd + 1; if ($serv->bind($fd, $uid)) { $serv->send($fd, "bind {$uid} success"); } } else { if (empty($serv->fdlist[$fd])) { $serv->fdlist[$fd] = $conn['uid']; } print_r($serv->fdlist); foreach ($serv->fdlist as $_fd => $uid) { $serv->send($_fd, "{$fd} say:" . $data . PHP_EOL); }
function my_onReceive(swoole_server $serv, $fd, $from_id, $data) { my_log("Worker#{$serv->worker_pid} Client[{$fd}@{$from_id}]: received: {$data}"); $cmd = trim($data); if ($cmd == "reload") { $serv->reload(); } elseif ($cmd == "task") { $task_id = $serv->task("task " . $fd); echo "Dispath AsyncTask: id={$task_id}\n"; } elseif ($cmd == "taskclose") { $serv->task("close " . $fd); echo "close the connection in taskworker\n"; } elseif ($cmd == "tasksend") { $serv->task("send " . $fd); } elseif ($cmd == "bigtask") { $serv->task(str_repeat('A', 8192 * 5)); } elseif ($cmd == "taskwait") { $result = $serv->taskwait("taskwait"); if ($result) { $serv->send($fd, "taskwaitok"); } echo "SyncTask: result=" . var_export($result, true) . "\n"; } elseif ($cmd == "taskWaitMulti") { $result = $serv->taskWaitMulti(array(str_repeat('A', 8192 * 5), str_repeat('B', 8192 * 6), str_repeat('C', 8192 * 8))); if ($result) { $resp = "taskWaitMulti ok\n"; foreach ($result as $k => $v) { $resp .= "result[{$k}] length=" . strlen($v) . "\n"; } $serv->send($fd, $resp); } else { $serv->send($fd, "taskWaitMulti error\n"); } } elseif ($cmd == "hellotask") { $serv->task("hellotask"); } elseif ($cmd == "taskcallback") { $serv->task("taskcallback", -1, function (swoole_server $serv, $task_id, $data) { echo "Task Callback: "; var_dump($task_id, $data); }); } elseif ($cmd == "sendto") { $serv->sendto("127.0.0.1", 9999, "hello world"); } elseif ($cmd == "close") { $serv->send($fd, "close connection\n"); $result = $serv->close($fd); } elseif ($cmd == "info") { $info = $serv->connection_info(strval($fd), $from_id); var_dump($info["remote_ip"]); $serv->send($fd, 'Info: ' . var_export($info, true) . PHP_EOL); } elseif ($cmd == 'proxy') { $serv->send(1, "hello world\n"); } elseif ($cmd == 'sleep') { sleep(10); } elseif ($cmd == 'foreach') { foreach ($serv->connections as $fd) { echo "conn : {$fd}\n"; } return; } elseif ($cmd == 'tick') { $serv->tick(2000, function ($id) { echo "tick #{$id}\n"; }); } elseif ($cmd == 'addtimer') { $serv->addtimer(3000); } elseif ($cmd == "list") { $start_fd = 0; echo "broadcast\n"; while (true) { $conn_list = $serv->connection_list($start_fd, 10); if (empty($conn_list)) { echo "iterates finished\n"; break; } $start_fd = end($conn_list); var_dump($conn_list); } } elseif ($cmd == "list2") { foreach ($serv->connections as $con) { var_dump($serv->connection_info($con)); } } elseif ($cmd == "stats") { $serv_stats = $serv->stats(); $serv->send($fd, 'Stats: ' . var_export($serv_stats, true) . "\ncount=" . count($serv->connections) . PHP_EOL); } elseif ($cmd == "broadcast") { broadcast($serv, $fd, "hello from {$fd}\n"); } elseif ($cmd == "error") { hello_no_exists(); } elseif ($cmd == "exit") { exit("worker php exit.\n"); } elseif ($cmd == 'pause') { echo "pause receive data. fd={$fd}\n"; $serv->pause($fd); } elseif (substr($cmd, 0, 6) == "resume") { $resume_fd = substr($cmd, 7); $serv->resume($resume_fd); } elseif (substr($cmd, 0, 5) == "close") { $close_fd = substr($cmd, 6); $serv->close($close_fd); } elseif ($cmd == "shutdown") { $serv->shutdown(); } elseif ($cmd == "fatalerror") { require __DIR__ . '/php/error.php'; } elseif ($cmd == 'sendbuffer') { $buffer = G::getBuffer($fd); $buffer->append("hello\n"); $serv->send($fd, $buffer); } elseif ($cmd == 'defer') { $serv->defer(function () use($fd, $serv) { $serv->close($fd); $serv->defer(function () { echo "deferd\n"; }); }); $serv->send($fd, 'Swoole: ' . $data, $from_id); } else { $serv->send($fd, 'Swoole: ' . $data, $from_id); //$serv->close($fd); } //echo "Client:Data. fd=$fd|from_id=$from_id|data=$data"; // $serv->after( // 800, function () { // echo "hello"; // } // ); //swoole_server_send($serv, $other_fd, "Server: $data", $other_from_id); }
/** * 接收数据 * @param \swoole_server $serv * @param unknown $fd * @param unknown $from_id * @param unknown $data */ public function onReceive(\swoole_server $serv, $fd, $from_id, $data) { $data = self::decode($data); $connInfo = $serv->connection_info($fd, $from_id); if ($connInfo['server_port'] == $this->handleWorkerPort) { $module = $data['module']; $interface = $data['interface']; $cost_time = $data['cost_time']; $success = $data['success']; $time = $data['time']; $code = $data['code']; $msg = str_replace("\n", "<br>", $data['msg']); $ip = $serv->connection_info($fd)['remote_ip']; // 模块接口统计 $this->collectStatistics($module, $interface, $cost_time, $success, $ip, $code, $msg); // 全局统计 $this->collectStatistics('AllData', 'Statistics', $cost_time, $success, $ip, $code, $msg); // 失败记录日志 if (!$success) { $redis = $this->getRedis(); $logBuffer = $redis->get($this->logBufferKey); $logBuffer .= date('Y-m-d H:i:s', $time) . "\t{$ip}\t{$module}::{$interface}\tcode:{$code}\tmsg:{$msg}\n"; $redis->set($this->logBufferKey, $logBuffer); if (strlen($logBuffer) >= $this->max_log_buffer_size) { $this->writeLogToDisk(); } } } else { if ($connInfo['server_port'] == $this->handleProviderPort) { $provider = \Bootstrap\Provider::getInstance(); $provider->message($serv, $fd, $from_id, $data); } else { if ($connInfo['server_port'] == $this->udpFinderport) { if (empty($data)) { return false; } // 无法解析的包 if (empty($data['cmd']) || $data['cmd'] != 'REPORT_IP') { return false; } return $serv->send($fd, json_encode(array('result' => 'ok'))); } else { echo '端口错误' . PHP_EOL; } } } }
function my_onReceive(swoole_server $serv, $fd, $from_id, $data) { my_log("Worker#{$serv->worker_pid} Client[{$fd}@{$from_id}]: received: {$data}"); $cmd = trim($data); if ($cmd == "reload") { $serv->reload(); } elseif ($cmd == "task") { $serv->task("task-" . $fd); } elseif ($cmd == "taskwait") { $result = $serv->taskwait("taskwait"); if ($result) { $serv->send($fd, "taskwaitok"); } } elseif ($cmd == "taskWaitMulti") { $tasks = array('taskWaitMulti', 'taskWaitMulti'); $result = $serv->taskWaitMulti($tasks); if (is_array($result)) { $serv->send($fd, "taskWaitMulti OK"); } else { $serv->send($fd, "taskWaitMulti error"); } } elseif ($cmd == "hellotask") { $serv->task("hellotask"); } elseif ($cmd == "sendto") { $serv->sendto("127.0.0.1", 9999, "hello world"); } elseif ($cmd == "close") { $serv->close($fd); } elseif ($cmd == "info") { $info = $serv->connection_info(strval($fd), $from_id); $serv->send($fd, serialize($info)); } elseif ($cmd == 'proxy') { $serv->send(1, "hello world\n"); } elseif ($cmd == 'sleep') { sleep(10); } elseif ($cmd == 'sendfile') { $serv->sendfile($fd, __DIR__ . '/test.jpg'); } elseif ($cmd == 'foreach') { foreach ($serv->connections as $fd) { echo "conn : {$fd}\n"; } return; } elseif ($cmd == 'tick') { $serv->tick(1000, function ($id) use($serv, $fd) { $serv->send($fd, "tick"); $serv->clearTimer($id); }); } elseif ($cmd == 'after') { $serv->after(1000, function ($id) use($serv, $fd) { $serv->send($fd, "after"); }); } elseif ($cmd == "list") { $start_fd = 0; echo "broadcast\n"; while (true) { $conn_list = $serv->connection_list($start_fd, 10); if (empty($conn_list)) { echo "iterates finished\n"; break; } $start_fd = end($conn_list); var_dump($conn_list); } } elseif ($cmd == "list2") { foreach ($serv->connections as $con) { var_dump($serv->connection_info($con)); } } elseif ($cmd == "stats") { $serv_stats = $serv->stats(); $serv->send($fd, 'Stats: ' . var_export($serv_stats, true) . "\ncount=" . count($serv->connections) . PHP_EOL); } elseif ($cmd == "broadcast") { broadcast($serv, $fd, "hello from {$fd}\n"); } elseif ($cmd == "error") { hello_no_exists(); } elseif ($cmd == "exit") { exit("worker php exit.\n"); } elseif (substr($cmd, 0, 5) == "close") { $close_fd = substr($cmd, 6); $serv->close($close_fd); } elseif ($cmd == "shutdown") { $serv->shutdown(); } elseif ($cmd == "fatalerror") { require __DIR__ . '/php/error.php'; } elseif ($cmd == 'sendbuffer') { $buffer = G::getBuffer($fd); $buffer->append("hello\n"); $serv->send($fd, $buffer); } elseif ($cmd == 'defer') { $serv->defer(function () use($fd, $serv) { $serv->close($fd); $serv->defer(function () { echo "deferd\n"; }); }); $serv->send($fd, 'Swoole: ' . $data, $from_id); } elseif ($cmd == 'big_resp') { $serv->send($fd, str_repeat('A', 256 * 1024)); } elseif ($cmd == 'big_task') { $serv->task($fd . ' ' . str_repeat('A', 256 * 1024 - 8)); } else { $serv->send($fd, 'Swoole: ' . $data, $from_id); //$serv->close($fd); } //echo "Client:Data. fd=$fd|from_id=$from_id|data=$data"; // $serv->after( // 800, function () { // echo "hello"; // } // ); //swoole_server_send($serv, $other_fd, "Server: $data", $other_from_id); }
public function onReceive(\swoole_server $server, $fd, $fromId, $data) { if ($data == $this->preSysCmd . "reload") { $ret = intval($server->reload()); $server->send($fd, $ret); } elseif ($data == $this->preSysCmd . "info") { $info = $server->connection_info($fd); $server->send($fd, 'Info: ' . var_export($info, true) . PHP_EOL); } elseif ($data == $this->preSysCmd . "stats") { $serv_stats = $server->stats(); $server->send($fd, 'Stats: ' . var_export($serv_stats, true) . PHP_EOL); } elseif ($data == $this->preSysCmd . "shutdown") { $server->shutdown(); } else { $this->protocol->onReceive($server, $fd, $fromId, $data); } }
/** * 关闭了一个Tcp连接时触发 * * @param \swoole_server $server 当前进程的swoole_server对象 * @param int $fd 当前连接的文件描述符(惟一) * @param int $from_id 当前连接的Rector线程 */ public function OnClose(\swoole_server $server, $fd, $from_id) { $connectInfo = $server->connection_info($fd, $from_id); Log::Info("Close from {remote_ip}[{$fd}] to worker[{$server->worker_id}]", $connectInfo); Event::Listen('OnClose', [&$server, &$fd, &$from_id]); }
function my_onReceive(swoole_server $serv, $fd, $from_id, $data) { my_log("Worker#{$serv->worker_pid} Client[{$fd}@{$from_id}]: received: {$data}"); $cmd = trim($data); if ($cmd == "reload") { $serv->reload(); } elseif ($cmd == "task") { $task_id = $serv->task("task-" . $fd); echo "Dispath AsyncTask: id={$task_id}\n"; } elseif ($cmd == "taskwait") { $result = $serv->taskwait("taskwait"); if ($result) { $serv->send($fd, "taskwaitok"); } echo "SyncTask: result=" . var_export($result, true) . "\n"; } elseif ($cmd == "hellotask") { $serv->task("hellotask"); } elseif ($cmd == "sendto") { $serv->sendto("127.0.0.1", 9999, "hello world"); } elseif ($cmd == "close") { $serv->send($fd, "close connection\n"); $result = $serv->close($fd); } elseif ($cmd == "info") { $info = $serv->connection_info(strval($fd), $from_id); var_dump($info["remote_ip"]); $serv->send($fd, 'Info: ' . var_export($info, true) . PHP_EOL); } elseif ($cmd == 'proxy') { $serv->send(1, "hello world\n"); } elseif ($cmd == 'sleep') { sleep(10); } elseif ($cmd == 'foreach') { foreach ($serv->connections as $fd) { echo "conn : {$fd}\n"; } return; } elseif ($cmd == 'tick') { $serv->tick(2000, function ($id) { echo "tick #{$id}\n"; }); } elseif ($cmd == 'addtimer') { $serv->addtimer(3000); } elseif ($cmd == "list") { $start_fd = 0; echo "broadcast\n"; while (true) { $conn_list = $serv->connection_list($start_fd, 10); if (empty($conn_list)) { echo "iterates finished\n"; break; } $start_fd = end($conn_list); var_dump($conn_list); } } elseif ($cmd == "list2") { foreach ($serv->connections as $con) { var_dump($serv->connection_info($con)); } } elseif ($cmd == "stats") { $serv_stats = $serv->stats(); $serv->send($fd, 'Stats: ' . var_export($serv_stats, true) . PHP_EOL); } elseif ($cmd == "broadcast") { broadcast($serv, $fd, "hello from {$fd}\n"); } elseif ($cmd == "error") { hello_no_exists(); } elseif ($cmd == "exit") { exit("worker php exit.\n"); } elseif (substr($cmd, 0, 5) == "close") { $close_fd = substr($cmd, 6); $serv->close($close_fd); } elseif ($cmd == "shutdown") { $serv->shutdown(); } elseif ($cmd == 'sendbuffer') { $buffer = G::getBuffer($fd); $buffer->append("hello\n"); $serv->send($fd, $buffer); } else { $ret = $serv->send($fd, 'Swoole: ' . $data, $from_id); var_dump($ret); //$serv->close($fd); } //echo "Client:Data. fd=$fd|from_id=$from_id|data=$data"; // $serv->after( // 800, function () { // echo "hello"; // } // ); //swoole_server_send($serv, $other_fd, "Server: $data", $other_from_id); }
$serv->set(array('worker_num' => 4, 'dispatch_mode' => 4)); $serv->on('timer', function ($serv, $interval) { echo "onTimer: {$interval}\n"; }); $serv->on('start', function ($serv) { //$serv->addtimer(1000); }); $serv->on('workerStart', function ($serv, $worker_id) { echo "{$worker_id} start" . PHP_EOL; $serv->workerid = $worker_id; //if($worker_id == 0) $serv->addtimer(1000); }); $serv->on('connect', function ($serv, $fd, $from_id) { //echo "[#".posix_getpid()."]\tClient@[$fd:$from_id]: Connect.\n"; echo "{$fd} connect, worker:" . $serv->workerid . PHP_EOL; $conn = print_r($serv->connection_info($fd)); $serv->fdlist[$fd] = 1; print_r($serv->fdlist); }); $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) { foreach ($serv->fdlist as $_fd => $val) { $serv->send($_fd, "{$fd} say:" . $data . PHP_EOL); } });