/** * 初始化执行 * * @param bool $isRegisterServer */ 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(); }
/** * 创建 * * @return bool */ public function create() { if (parent::create()) { if ($this->_link) { # 读取数据 switch ($this->_type) { case 'mysql': return $this->_createByMySQL(); case 'sqlite': return false; case 'redis': case 'ssdb': return $this->_createByRedis(); case 'rocksdb': } return true; } else { return true; } } else { return false; } }