Método reConnect

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

(requiere Workerman versión >=3.3.5)

Reconectar. Generalmente se llama dentro del callback onClose, implementando la reconexión en caso de desconexión.

Si la conexión se interrumpe debido a problemas de red o reinicio del servicio remoto, se puede volver a conectar llamando a este método.

Parámetros

$delay

Cuánto tiempo esperar antes de ejecutar la reconexión. La unidad es en segundos, soportando decimales y puede ser preciso hasta milisegundos.

Si no se proporciona o el valor es 0, significa reconectar inmediatamente.

Es mejor pasar un parámetro para retrasar la reconexión, para evitar un consumo excesivo de CPU en la máquina local debido a problemas en el servicio remoto.

Valor de retorno

No tiene valor de retorno.

Ejemplo

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 "recv $msg\n";
    };
    $con->onClose = function(AsyncTcpConnection $con) {
        // Si la conexión se corta, reconectar después de 1 segundo
        $con->reConnect(1);
    };
    $con->connect();
};

Worker::runAll();

Nota
Al llamar a reconnect y reconectar con éxito, el método $con->onConnect se llamará nuevamente (si está configurado). A veces queremos que el método onConnect se ejecute solo una vez y no se ejecute de nuevo al reconectar, como se muestra en el siguiente ejemplo:

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 "recv $msg\n";
    };
    $con->onClose = function(AsyncTcpConnection $con) {
        // Si la conexión se corta, reconectar después de 1 segundo
        $con->reConnect(1);
    };
    $con->connect();
};

Worker::runAll();