Bağlantısı Onaylanmamış Olmayanları Kapatma

Soru:

Belirtilen süre içinde veri göndermemiş olan istemciyi nasıl kapatabilirim?
Örneğin, 30 saniye içinde bir veri almazsam, bu istemci bağlantısını otomatik olarak kapatmalıyım.
Amaç, onaylanmamış bağlantıların belirlenen süre içinde onaylanması gerektiğidir.

Cevap:

use Workerman\Worker;
use Workerman\Timer;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('xxx://x.x.x.x:x');
$worker->onConnect = function(TcpConnection $connection)
{
    // Geçici olarak $connection nesnesine auth_timer_id özelliği ekleyerek zamanlayıcı id'sini saklayın
    // 30 saniye içinde bağlantıyı kapatmak için istekte bulunması gerekecek, zamanlayıcıyı silmek için istemcinin 30 saniye içinde doğrulama göndermesi gerekiyor
    $connection->auth_timer_id = Timer::add(30, function()use($connection){
        $connection->close();
    }, null, false);
};
$worker->onMessage = function(TcpConnection $connection, $msg)
{
    $msg = json_decode($msg, true);
    switch($msg['type'])
    {
    case 'login':
        ...略
        // Doğrulama başarılı, zamanlayıcıyı sil, bağlantının kapatılmasını önle
        Timer::del($connection->auth_timer_id);
        break;
         ... 略
    }
    ... 略
}