Método reConnect

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

(requer Workerman versão >= 3.3.5)

Reconexão. Geralmente chamado no callback onClose, implementando a reconexão em caso de desconexão.

Se a conexão for interrompida devido a problemas de rede ou reinício do serviço remoto, você pode usar este método para reconectar.

Parâmetros

$delay

Quanto tempo depois executar a reconexão. A unidade é em segundos, suportando números decimais, podendo ser precisa até milissegundos.

Se não for passado ou se o valor for 0, significa reconectar imediatamente.

É melhor passar um parâmetro para que a reconexão seja executada com atraso, evitando que o CPU da máquina local consuma excessivamente devido a problemas no serviço remoto.

Valor de retorno

Sem valor de retorno

Exemplo

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) {
        // Se a conexão for interrompida, reconectar em 1 segundo
        $con->reConnect(1);
    };
    $con->connect();
};

Worker::runAll();

Atenção
Após chamar reconnect com sucesso, o método $con->onConnect será chamado novamente (se tiver sido definido). Às vezes, queremos que o método onConnect execute apenas uma vez, e não execute novamente durante a reconexão. Veja o exemplo abaixo:

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) {
        // Se a conexão for interrompida, reconectar em 1 segundo
        $con->reConnect(1);
    };
    $con->connect();
};

Worker::runAll();