MyQEE\Server\Clusters\Host::init PHP Метод

init() публичный статический Метод

初始化执行
public static init ( boolean $isRegisterServer = false )
$isRegisterServer boolean
    public static function init($isRegisterServer = false)
    {
        if (self::$table) {
            return;
        }
        self::$isRegisterServer = $isRegisterServer ? true : false;
        if (isset(Server::$config['clusters']['count']) && ($size = Server::$config['clusters']['count'])) {
            # 必须是2的指数, 如1024,8192,65536等
            $size = bindec(str_pad(1, strlen(decbin((int) $size - 1)), 0)) * 2;
        } else {
            $size = 1024;
        }
        $table = new Table($size * 2);
        $table->column('id', Table::TYPE_INT, 5);
        // 所在组ID
        $table->column('group', Table::TYPE_STRING, 64);
        // 分组
        $table->column('ip', Table::TYPE_STRING, 64);
        // IP
        $table->column('port', Table::TYPE_INT, 5);
        // 端口
        $table->column('worker_num', Table::TYPE_INT, 5);
        // 进程数
        $table->column('encrypt', Table::TYPE_INT, 1);
        // 通讯数据是否加密
        $table->column('key', Table::TYPE_STRING, 32);
        // 数据加密密钥
        if (self::$isRegisterServer) {
            # 注册服务器需要多几个字段
            $table->column('fd', Table::TYPE_INT, 10);
            // 所在 fd
            $table->column('from_id', Table::TYPE_INT, 10);
            // 所在 from_id
            $table->column('removed', Table::TYPE_INT, 10);
            // 移除时间
            # 记录自动分配ID
            $groupIdTable = new Table(1024);
            $groupIdTable->column('id', Table::TYPE_INT, 5);
            $groupIdTable->create();
            # fd 所对应的序号
            $fdTable = new Table($size * 2);
            $fdTable->column('group', Table::TYPE_STRING, 64);
            $fdTable->column('id', Table::TYPE_INT, 5);
            $fdTable->create();
            self::$fdToIdTable = $fdTable;
            self::$groupIdTable = $groupIdTable;
        }
        $table->create();
        self::$table = $table;
        self::$lastChangeTime = new \Swoole\Atomic(time());
        self::$taskIdAtomic = new \Swoole\Atomic();
    }

Usage Example

Пример #1
0
 public function start($ip, $port)
 {
     if (!Host::$table) {
         # Host还没初始化, 需要初始化
         Host::init(false);
     }
     # 初始化任务服务器
     $server = new \Swoole\Server($ip, $port, SWOOLE_BASE, SWOOLE_SOCK_TCP);
     Server::$server = $server;
     $this->server = $server;
     $config = ['dispatch_mode' => 5, 'worker_num' => Server::$config['swoole']['task_worker_num'], 'max_request' => Server::$config['swoole']['task_max_request'], 'task_worker_num' => 0, 'package_max_length' => 1024 * 1024 * 50, 'task_tmpdir' => Server::$config['swoole']['task_tmpdir'], 'buffer_output_size' => Server::$config['swoole']['buffer_output_size'], 'open_eof_check' => true, 'open_eof_split' => true, 'package_eof' => \MyQEE\Server\RPC\Server::$EOF];
     $server->set($config);
     $server->on('WorkerStart', [$this, 'onStart']);
     $server->on('Receive', [$this, 'onReceive']);
     $server->on('Start', function () use($ip, $port) {
         Server::$instance->info("task sever tcp://{$ip}:{$port} start success.");
     });
     $server->start();
 }