One - 極簡 . 高性能 . 鬆耦合 . 分佈式 . 可運行於多種環境(cli,apache/php-fpm,swoole)php
碼雲: https://gitee.com/vicself/one
github: https://github.com/lizhichao/onegit
適用場景github
使用文件(file)緩存時,不設置過時時間緩存失敗問題。web
flushTableInfo
,主動刷新數據表結構緩存。Actor
是一種與共享內存對應的併發模型,具備資源獨佔性。能夠理解爲一個對象,它有屬性和方法。apache
Actor::init()
建立ActorActor::drop($actor_id)
刪除ActorActor::call($actor_id, $method, $args)
Actor通信每一個對象都在變化,對象之間有通信的場景。後端
每一個角色就是一個actor
實例:
屬性:生命值,攻擊力
方法:生命值加/減緩存
class UserActor extends Actor { // 生命值 private $life_value = 10; // 攻擊力 private $power_value = 5; // 長鏈接fd public $fd; // 返回本身的actor id public function getActorId() { return $this->actor_id; } // 改變生命值 並 通知客戶端 public function changeLifeValue($n) { $this->life_value += $n; $this->noticeClient(); } // 攻擊某個 Actor => 減小Actor的生命值 // 被攻擊Actor能夠其餘進程或者其餘機器上 public function fire($actor_id) { $this->call($actor_id,'changeLifeValue',[$this->power_value]); } // 通知客戶端當前的生命值 public function noticeClient() { self::$server->push($this->fd,$this->life_value); } } // 實例化一個角色 $user1 = UserActor::init(); // 獲取這個角色的actor_id $actor_id = $user1->getActorId(); // 角色死亡 銷燬 actor UserActor::drop($actor_id);
每一個用戶的屬性須要儲存在一個公共的地方,每次存取都很麻煩。若是改變用戶的屬性值還須要考慮併發問題。若是屬性更多編寫起來將很是複雜。
例如:用戶a,b,c。 都分佈在不一樣的機器上。a和b同時打到了c;服務器