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

連接時身份認證

UID

用戶連上來時服務器判斷如果是剛連的就發(fā)一個需要驗證信息的命令讓用戶馬上驗證身份,具體要怎么做?

5764 3 1
3個回答

bevin1984

在onConnect里可以發(fā)起啊。

  • 暫無評論
walkor 打賞

可以使用定時器,在客戶端onConnect后多久沒有發(fā)送數(shù)據(jù)過來就close掉

如果是基于worker做的代碼類似如下

$worker = new Worker(...);
$worker->onConnect = function($connection)
{
    $timeout = 5;
    // 這里timerId是給connection動態(tài)添加的屬性,用來保存這個connection的關連接的定時器id
    // 方便后面身份驗證后刪除定時器
    $connection->timerId = Timer::add($timeout, function($connection){
        $connection->close();
    }, array($connection), false);
};
$worker->onMessage = function($connection, $data)
{
    // $connection->timerId不為空,則該連接還沒驗證,則嘗試驗證
    if(!empty($connection->timerId))
    {
        // 你的驗證函數(shù),驗證ok
        if(you_check_auth_func($data))
        {
            // 刪除定時器
            Timer::del($connection->timerId);
            // 刪除timerId,標記已經(jīng)驗證ok
            $connection->timerId = null;
        }
        // 沒通過驗證則關閉連接
        else
        {
            $connection->close();
        }
    }
};

如果是基于GatewayWorker做的
簡單的方法是使用心跳來做,服務端設置心跳間隔,如果客戶端在制定時間內(nèi)沒有發(fā)來數(shù)據(jù)則斷開連接。參考手冊 http://gatewayworker-doc.workerman.net/gateway-worker-development/heartbeat.html

如果覺得心跳不能滿足要求,下面是GatewayWorker的做法,與基于worker的方法類似

class Event
{
    public static function onConnect($client_id)
    {
        // 設置一個定時器,$timeout 秒后關閉連接
        $timeout = 5;
        $_SESSION = Timer::add($timeout, function($client_id){
            Gateway::closeClient($client_id);
        }, array($client_id), false);
    }

    public static function onMessage($client_id, $data)
    {
        // 如果沒有驗證過則嘗試驗證
        if(!empty($_SESSION))
        {
            // 驗證通過
            if(your_check_auth_func($data))
            {
                // 刪除定時器
                Timer::del($_SESSION);
                // 刪除timerId,標記已經(jīng)驗證ok
                unset($_SESSION);
            }
            // 沒驗證通過則關閉連接?
            else
            {
                Gateway::closeClient($client_id);
            }
        }
        .....
    }

}
  • 暫無評論
UID

3Q試下

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