One - 極簡 . 高性能 . 鬆耦合 . 分佈式 . 可運行於多種環境(cli,apache/php-fpm,swoole)php
碼雲: gitee.com/vicself/one
github: github.com/lizhichao/o…git
適用場景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;服務器