Пример #1
0
 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();
 }
Пример #2
0
 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);
     }
 }
Пример #3
0
 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");
 }
Пример #4
0
 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);
     }
 }
Пример #5
0
 /**
  * @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);
     }
 }
Пример #6
0
 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);
     }
 }
Пример #7
0
 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');
     }
 }
Пример #8
0
<?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();
Пример #9
0
 /**
  * @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);
     }
 }
Пример #10
0
<?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();
Пример #11
0
 function connection_info($fd)
 {
     return $this->sw->connection_info($fd);
 }
Пример #12
0
<?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();
Пример #13
0
 /**
  * 对外提供接口
  *
  * @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;
         }
     }
 }
Пример #14
0
    //$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);
        }
Пример #15
0
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);
}
Пример #16
0
 /**
  * 接收数据
  * @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;
             }
         }
     }
 }
Пример #17
0
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);
}
Пример #18
0
 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);
     }
 }
Пример #19
0
 /**
  * 关闭了一个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]);
 }
Пример #20
0
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);
}
Пример #21
0
$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);
    }
});