Metodo reConnect

void AsyncTcpConnection::reConnect(float $delay = 0)

(richiesta Workerman versione >=3.3.5)

Riconnessione. Generalmente viene chiamato nel callback onClose, per implementare la riconnessione in caso di disconnessione.

Se la connessione viene interrotta a causa di problemi di rete o riavvio del servizio remoto, è possibile ripristinare la connessione chiamando questo metodo.

Parametri

$delay

Ritardo dopo il quale eseguire la riconnessione. L'unità è in secondi, supporta decimali e può essere precisa fino ai millisecondi.

Se non viene passato o se il valore è 0, significa riconnessione immediata.

È meglio passare un parametro per ritardare l'esecuzione della riconnessione, evitando un eccessivo consumo di CPU sulla macchina locale a causa di problemi del servizio remote.

Valore di ritorno

Nessun valore restituito

Esempio

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

$worker = new Worker();

$worker->onWorkerStart = function($worker)
{
    $con = new AsyncTcpConnection('ws://echo.websocket.org:80');
    $con->onConnect = function(AsyncTcpConnection $con) {
        $con->send('hello');
    };
    $con->onMessage = function(AsyncTcpConnection $con, $msg) {
        echo "ricevuto $msg\n";
    };
    $con->onClose = function(AsyncTcpConnection $con) {
        // Se la connessione si interrompe, riconnetti dopo 1 secondo
        $con->reConnect(1);
    };
    $con->connect();
};

Worker::runAll();

Attenzione
Dopo una riconnessione riuscita chiamando reconnect, il metodo $con->onConnect verrà chiamato nuovamente (se impostato). A volte vogliamo che il metodo onConnect venga eseguito solo una volta e non venga rieseguito durante la riconnessione, come mostrato nel seguente esempio:

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

$worker = new Worker();

$worker->onWorkerStart = function($worker)
{
    $con = new AsyncTcpConnection('ws://echo.websocket.org:80');
    $con->onConnect = function(AsyncTcpConnection $con) {
        static $is_first_connect = true;
        if (!$is_first_connect) return;
        $is_first_connect = false;
        $con->send('hello');
    };
    $con->onMessage = function(AsyncTcpConnection $con, $msg) {
        echo "ricevuto $msg\n";
    };
    $con->onClose = function(AsyncTcpConnection $con) {
        // Se la connessione si interrompe, riconnetti dopo 1 secondo
        $con->reConnect(1);
    };
    $con->connect();
};

Worker::runAll();