国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

設置定時器,用于用戶重新連接,避免頻繁廣播,但是運行后時好時壞

muyu
<?php
namespace Core;
use Core\Site;
use \GatewayWorker\Lib\Gateway;
use Core\RCache;
use Workerman\Lib\Timer;

class Toos extends Site{

    //當前連接的所有用戶 封裝  后續(xù)并發(fā)多了采用nosql存儲  例如memcache redis

    private static $_redis = array(
        "host"  =>  "127.0.0.1",
        "port"  =>  6379,
    );

    //實例對象
    private static $Instance    = null;
    //私有  禁止外部實例化 防止數(shù)據(jù)分散
    protected function __construct(){}
    protected function __clone(){}
    /**
     * 取得類實例
     * @static
     * @access public
     * @return object
     */
    public static function getInstance() {
        if(!(self::$Instance instanceof  self)){
            self::$Instance = new self;
        }
        return self::$Instance;
    }
    /**
     * 獲取一個用戶
     * @static
     * @access public
     * @param  Int      $id
     * @return array || null
     */
    public static function getUserOne($uid = 0){
        $Redis = Redis::getInstance(self::$_redis);
        return @unserialize($Redis->get($uid));
    }
    /**
     * 設置一個用戶
     * @static
     * @access public
     * @param Int       $id
     * @return void
     */
    public static function setUserOne($uid = 0 , $user = array()){
        $Redis = Redis::getInstance(self::$_redis);
        $Redis->set($uid,serialize($user));
    }
    /**
     * 清除一個用戶
     * @static
     * @access public
     * @param Int       $id
     * @return void
     */
    public static function delUserOne($uid = 0){
        $Redis = Redis::getInstance(self::$_redis);
        $Redis->del($uid);
    }
    /**
     * 用戶登陸,初始化信息.
     *
     * @static
     * @access public
     * @param  Int      $id
     * @param  String   $client_id
     * @return aray
     */
    public static function login($id = 0 , $client_id = ''){
        //檢測是否是重新連接  包括刷新
        $user = self::clientIsReconnect($id);
        //設置session
        empty($user) && $user = time();
        $user = $id;
        Gateway::setSession($client_id, $user);
        self::setUserOne($id , array('client'=>$client_id));
        Gateway::bindUid($client_id,$id);//綁定此用戶與當前客戶端的id
        return self::createResponse("user login successed!" , "login" , 200);
    }
    /**
     *  當前用戶是否是重新鏈接的
     *
     * @static
     * @access public
     * @param  Int      $id
     * @param  String   $client_id
     * @return bool
     */
    public static function clientIsReconnect($id){
        $user = self::getUserOne($id);
        if($user){
            //存在 正在重新鏈接 刪除定時器
            if(isset($user) && !is_null($user)){
                echo "Timerdel \n";
                Timer::del($user);
                unset($user);
            }
        }
        return $user;
    }
    /**
     *  退出當前登陸
     *
     * @static
     * @access public
     * @param  String   $client_id
     * @param  Array    $session
     * @return void
     */
    public static function logout($client_id , $session = array()){
        $uid = isset($session) ? (int) $session : 0;
        if($uid <= 0)return;
        $user = self::getUserOne($uid);
        //設置定時器  1分鐘內不連接上來則認為下線
        $user   =   Timer::add(7, array('Core\Toos', 'clearUser'), array($uid), false);
        echo "set timer_id\n";
        //var_dump($user);
        self::setUserOne($uid ,$user);
    }
    /**
     *  用戶徹底下線  清除用戶
     *
     * @static
     * @access public
     * @param  Int  $uid
     * @return void
     */
    public static function clearUser($uid = 0){
        echo "del {$uid}\n";
    }
    /**
     *  心跳包
     *
     * @static
     * @access public
     * @return void
     */
    public static function heartBeat(){
        //echo "heartBeat。。。。\n";
        return;
    }

}
3798 0 0
0個回答

年代過于久遠,無法發(fā)表回答
??