Esempio n. 1
0
 function errorHandler()
 {
     if (!empty($this->current_fd)) {
         $rsp = Proxy::shutdown_handler();
         $rsp && $this->serv->send($this->current_fd, $rsp);
     }
 }
Esempio n. 2
0
function my_onReceive(swoole_server $serv, $fd, $from_id, $data)
{
    //var_dump($serv->connection_info($fd, $from_id));
    //echo "worker_pid=".posix_getpid().PHP_EOL;
    //var_dump($fd, $from_id);
    $serv->send($fd, 'Swoole: ' . $data, $from_id);
}
Esempio n. 3
0
 public function onReceive(swoole_server $serv, $fd, $from_id, $data)
 {
     echo "Get Message From Client {$fd}:{$data}\n";
     $this->test = new Test();
     var_dump($this->test);
     $serv->task(serialize($this->test));
 }
Esempio n. 4
0
function my_onTask(swoole_server $serv, $task_id, $from_id, $data)
{
    static $datas = array();
    if (isset($data['cmd'])) {
        switch ($data['cmd']) {
            case 'get':
                $key = $data['key'];
                $val = isset($datas[$key]) ? $datas[$key] : "";
                $serv->finish(array('key' => $key, 'val' => $val));
                break;
            case "set":
                $key = $data['key'];
                $val = $data['val'] . "_" . $from_id;
                $datas[$key] = $val;
                return;
                break;
            case "del":
                $key = $data['key'];
                if (isset($datas[$key])) {
                    unset($datas[$key]);
                }
                break;
            case "task":
                $key = $data['key'];
                echo "Do task " . $key . PHP_EOL;
                break;
        }
    }
    echo "AsyncTask[PID=" . posix_getpid() . "]: task_id={$task_id}." . PHP_EOL;
    // $serv->finish("OK");
}
Esempio n. 5
0
 public function onReceive(swoole_server $serv, $fd, $from_id, $data)
 {
     echo "Get Message from client {$fd}:{$data}:{$from_id}\n";
     $params = array('fd' => $fd, 'file' => $data);
     $id = $serv->task(json_encode($params));
     echo "Continue Handle Worker {$id}\n";
 }
Esempio n. 6
0
 public function onReceive(swoole_server $serv, $fd, $from_id, $data)
 {
     echo "Get Message From Client {$fd}:{$data}\n";
     $param = array('fd' => $fd, 'msg' => $data);
     $str = json_encode($param);
     $serv->after(1000, array($this, 'onAfter'), $str);
 }
Esempio n. 7
0
function my_onReceive(swoole_server $serv, $fd, $from_id, $data)
{
    $cmd = trim($data);
    if ($cmd == "reload") {
        $serv->reload($serv);
    } elseif ($cmd == "task") {
        $task_id = $serv->task("hello world", 0);
        echo "Dispath AsyncTask: id={$task_id}\n";
    } elseif ($cmd == "info") {
        $info = $serv->connection_info($fd);
        $serv->send($fd, 'Info: ' . var_export($info, true) . PHP_EOL);
    } elseif ($cmd == "broadcast") {
        $start_fd = 0;
        while (true) {
            $conn_list = $serv->connection_list($start_fd, 10);
            if ($conn_list === false) {
                break;
            }
            $start_fd = end($conn_list);
            foreach ($conn_list as $conn) {
                if ($conn === $fd) {
                    continue;
                }
                $serv->send($conn, "hello from {$fd}\n");
            }
        }
    } elseif ($cmd == "error") {
        hello_no_exists();
    } elseif ($cmd == "shutdown") {
        $serv->shutdown();
    } else {
        $serv->send($fd, 'Server Receive: ' . $data . PHP_EOL, $from_id);
        $data = json_decode($data, true);
        if (isset($data['cmd'])) {
            switch ($data['cmd']) {
                case 'get':
                    $key = $data['key'];
                    $result = $serv->taskwait(json_encode($data), 0.5, 0);
                    $serv->send($fd, "get {$key}:" . $result . PHP_EOL);
                    break;
                case "set":
                    $serv->task(json_encode($data), 0);
                    $serv->send($fd, "ok" . PHP_EOL);
                    break;
                case "del":
                    $serv->task(json_encode($data), 0);
                    break;
                case "reload":
                    break;
                default:
                    echo "server:" . $data . PHP_EOL;
            }
        }
        //$serv->close($fd);
    }
    //echo "Client:Data. fd=$fd|from_id=$from_id|data=$data";
    //$serv->deltimer(800);
    //swoole_server_send($serv, $other_fd, "Server: $data", $other_from_id);
}
Esempio n. 8
0
 public function process(swoole_server $serv, $taskId, $fromId, $data)
 {
     // model load
     $this->defaultModel->sayHello();
     // library load
     $this->mcurl->isEnable();
     $serv->finish('sync ok!');
 }
Esempio n. 9
0
 public function onReceive(swoole_server $serv, $fd, $from_id, $data)
 {
     echo "Get Message From Client {$fd}:{$data}\n";
     // send a task to task worker.
     $param = array('fd' => $fd, 'source' => $data);
     $serv->task(json_encode($param));
     echo "Continue Handle Worker\n";
 }
Esempio n. 10
0
 function serve()
 {
     $serv = new \swoole_server(SERVERHOST, SERVERPORT);
     $serv->on('workerStart', [$this, 'onStart']);
     $serv->on('receive', [$this, 'onReceive']);
     $serv->set(array('worker_num' => 1, 'dispatch_mode' => 1, 'open_length_check' => true, 'package_max_length' => 8192000, 'package_length_type' => 'N', 'package_length_offset' => 0, 'package_body_offset' => 4));
     $serv->start();
 }
Esempio n. 11
0
 public function __construct($host, $ip, $config, $bufferDriverClass)
 {
     $server = new \swoole_server($host, $ip, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);
     $server->set($config);
     $server->on('receive', array($this, 'onReceive'));
     $server->on('close', array($this, 'onClose'));
     $this->server =& $server;
     $this->bufferDriverClass = $bufferDriverClass;
 }
Esempio n. 12
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);
     }
 }
Esempio n. 13
0
 public function onReceive(swoole_server $serv, $fd, $from_id, $data)
 {
     echo "Get Message From Client {$fd}:{$data}\n";
     foreach ($serv->connections as $client) {
         if ($fd != $client) {
             $serv->send($client, $data);
         }
     }
 }
Esempio n. 14
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");
 }
Esempio n. 15
0
 function run()
 {
     $serv = new swoole_server("127.0.0.1", 8002);
     $serv->set(array('timeout' => 1, 'poll_thread_num' => 1, 'worker_num' => 1, 'backlog' => 128, 'max_conn' => 10000, 'dispatch_mode' => 2));
     $serv->on('Receive', array($this, 'onReceive'));
     $serv->on('Close', array($this, 'onClose'));
     //swoole_server_addtimer($serv, 2);
     #swoole_server_addtimer($serv, 10);
     $serv->start();
 }
Esempio n. 16
0
 function onReceive(swoole_server $serv, $fd, $from_id, $data)
 {
     $this->count[$fd]++;
     echo "Client#{$fd} recv: {$data}\n";
     if ($this->count[$fd] > 10) {
         $serv->close($fd);
     } else {
         $serv->send($fd, "hello client");
     }
 }
Esempio n. 17
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);
     }
 }
Esempio n. 18
0
 function run($_setting = array())
 {
     $default_setting = array('dispatch_mode' => 3, 'max_request' => 0, 'open_eof_split' => true, 'package_eof' => self::EOF);
     define('SWOOLE_SERVER', true);
     $setting = array_merge($default_setting, $_setting);
     $serv = new \swoole_server('0.0.0.0', self::PORT, SWOOLE_PROCESS);
     $serv->set($setting);
     $serv->on('receive', array($this, 'onReceive'));
     $this->serv = $serv;
     $this->serv->start();
 }
Esempio n. 19
0
 public function onReceive(swoole_server $serv, $fd, $from_id, $data)
 {
     $request = unpack("N", $data);
     print_r($request);
     $length = $request[1];
     $cmd = $request[2];
     $filename = substr($data, -$length);
     echo "length = {$length}\n";
     echo "{$filename}\n";
     $serv->sendfile($fd, __DIR__ . "/" . $filename);
 }
Esempio n. 20
0
 public function __construct()
 {
     //初始化应用
     $this->initializationOfApp();
     // 创建swoole_http_server对象
     $server = new swoole_server("0.0.0.0", 9500);
     $server->on('connect', array($this, 'onConnect'));
     $server->on('receive', array($this, 'onReceive'));
     $server->on('close', array($this, 'onClose'));
     $server->start();
 }
Esempio n. 21
0
 function run($_setting = array())
 {
     $default_setting = array('worker_num' => 4, 'open_eof_check' => true, 'open_eof_split' => true, 'package_eof' => self::EOF);
     $this->pid_file = $_setting['pid_file'];
     $setting = array_merge($default_setting, $_setting);
     $serv = new \swoole_server('0.0.0.0', self::SVR_PORT_AOP, SWOOLE_PROCESS, SWOOLE_TCP);
     $serv->set($setting);
     $serv->on('receive', array($this, 'onReceive'));
     $this->serv = $serv;
     $this->serv->start();
 }
Esempio n. 22
0
 public function start()
 {
     $this->setTitle('proxy');
     $type = $this->option['type'] == 'UDP' ? SWOOLE_SOCK_UDP : SWOOLE_SOCK_TCP;
     $server = new \swoole_server($this->option['host'], $this->option['port'], SWOOLE_PROCESS, $type);
     $server->set($this->option['setting']);
     $event = ['Start', 'Receive', 'Close', 'Shutdown', 'Timer', 'WorkerStart', 'WorkerStop', 'Task', 'Finish', 'WorkerError', 'MasterConnect', 'MasterClose', 'Connect'];
     foreach ($event as $event) {
         $server->on($event, [$this, sprintf('on%s', $event)]);
     }
     $this->server = $server;
     $this->server->start();
 }
Esempio n. 23
0
 protected function initListener()
 {
     $listeners = Application::AutoBuildCollection("Listener.php", IListener::class);
     (yield array_shift($listeners));
     /** @var IListener $listener */
     foreach ($listeners as $listener) {
         $port = $this->swoole->addlistener($listener->GetHost(), $listener->GetPort(), $listener->GetType());
         if (is_array($listener->GetSetting())) {
             $port->set($listener->GetSetting());
         }
         $this->_listenerConfigs[get_class($listener)] = ['Host' => $listener->GetHost(), 'Port' => $listener->GetPort(), 'Type' => $this->_getTypeName($listener->GetType())];
     }
 }
Esempio n. 24
0
 function onReceive($serv, $fd, $from_id, $data)
 {
     if (!isset($this->clients[$fd])) {
         $this->serv->send($fd, "backend server not connected. please try reconnect.");
         $this->serv->close($fd);
     } else {
         echo microtime() . ": client receive\n";
         $backend_socket = $this->clients[$fd]['socket'];
         $backend_socket->send($data);
         echo microtime() . ": send to backend\n";
         echo str_repeat('-', 100) . "\n";
     }
 }
Esempio n. 25
0
 function onReceive($serv, $fd, $from_id, $data)
 {
     //没有空闲的数据库连接
     if (count($this->idle_pool) == 0) {
         //等待队列未满
         if (count($this->wait_queue) < $this->wait_queue_max) {
             $this->wait_queue[] = array('fd' => $fd, 'sql' => $data);
         } else {
             $this->serv->send($fd, "request too many, Please try again later.");
         }
     } else {
         $this->doQuery($fd, $data);
     }
 }
Esempio n. 26
0
 function listen($host = '0.0.0.0', $port = 9510)
 {
     $swoole_setting = (require dirname(__DIR__) . '/configs/swoole.php');
     $server = new swoole_server($host, $port, SWOOLE_BASE);
     $swoole_setting['open_eof_check'] = true;
     $swoole_setting['open_eof_split'] = true;
     $swoole_setting['package_eof'] = self::EOF;
     $server->set($swoole_setting);
     $server->on('WorkerStart', [$this, 'onStart']);
     $server->on('WorkerStop', [$this, 'onStop']);
     $server->on('receive', [$this, 'onReceive']);
     $this->server = $server;
     $this->server->start();
 }
Esempio n. 27
0
 /**
  * TaskWorker收到任务时触发
  *
  * @param \swoole_server $server
  * @param int            $task_id
  * @param int            $from_id
  * @param mixed          $param
  */
 public function OnTask(\swoole_server $server, $task_id, $from_id, $param)
 {
     //Log::Debug("Task accept task_id[$task_id]  from_id[$from_id]");
     Event::Listen('TaskReceived', [&$server, &$task_id, &$from_id, &$param]);
     //if($server->worker_id % 2 == 0)
     //{
     //	sleep(2);
     //	if(rand(0, 100) > 50)
     //	{
     //		//return;
     //	}
     //}
     Event::Listen('TaskFinished', [&$server, &$task_id, &$from_id, &$param]);
     $server->finish('finish');
 }
Esempio n. 28
0
 private function createServer()
 {
     $server = new \swoole_server($this->host, $this->port, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);
     $server->set($this->normalizedConfig());
     $server->on('start', [$this, 'onServerStart']);
     $server->on('shutdown', [$this, 'onServerStop']);
     $server->on("receive", [$this, "onServerReceive"]);
     $server->on('workerStart', [$this, 'onWorkerStart']);
     $server->on('workerStop', [$this, 'onWorkerStop']);
     $server->on('close', [$this, 'onClose']);
     $server->on('task', [$this, 'onTask']);
     $server->on('finish', [$this, 'onFinish']);
     //onFinish
     return $server;
 }
Esempio n. 29
0
 public function serve()
 {
     $support_callback = ['start' => [$this, 'onStart'], 'managerStart' => [$this, 'onManagerStart'], 'workerStart' => [$this, 'onWorkerStart'], 'receive' => [$this, 'onReceive'], 'task' => null, 'finish' => null, 'workerStop' => [$this, 'onWorkerStop']];
     foreach ($support_callback as $name => $callback) {
         // If has the dependency injection
         if (is_callable(Di::get($name))) {
             $callback = Di::get($name);
         }
         if ($callback !== null) {
             $this->serv->on($name, $callback);
         }
     }
     $this->serv->set($this->swoole_config);
     $this->serv->start();
 }
 public function onReceive(\swoole_server $server, $fd, $from_id, $data)
 {
     $data = trim($data);
     if ($data == 'Stop') {
         //停止
         $server->shutdown();
         $server->send($fd, 'success', $from_id);
     } else {
         if ($data == 'Stats') {
             //状态
             $data = $server->stats();
             $server->send($fd, json_encode($data), $from_id);
         } else {
             if ($data == 'Reload') {
                 //重启
                 $server->reload();
                 $server->send($fd, 'success', $from_id);
             } else {
                 if ($data == 'ResetTelnet') {
                     //重置所有telnet链接
                 } else {
                     $data = json_decode($data, true);
                     if ($data['act'] == 'Telnet' && isset($data['ip']) && isset($data['cmd'])) {
                         //执行命令
                         $service = TelnetEvent::getService($data['ip']);
                         if ($service == null) {
                             $result['code'] = 2;
                         } else {
                             if ($data['cmd'] > 0) {
                                 if (isset($data['arg'])) {
                                     $result['data'] = $service->exec($data['cmd'], $data['arg']);
                                 } else {
                                     $result['data'] = $service->exec($data['cmd']);
                                 }
                                 if ($result == null || $result['data'] == null) {
                                     $result = ['code' => 3];
                                 } else {
                                     $result['code'] = 1;
                                 }
                             } else {
                                 $service->getSwitch()->connect();
                                 if ($service->getSwitch()->isConnect()) {
                                     $result['code'] = 1;
                                 } else {
                                     $result['code'] = 3;
                                 }
                             }
                         }
                         $server->send($fd, json_encode($result), $from_id);
                     } else {
                         $server->send($fd, 'unknown command!', $from_id);
                     }
                 }
             }
         }
     }
     $server->close($fd);
 }