Метод reConnect

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

(требуется версия Workerman >= 3.3.5)

Повторное подключение. Обычно вызывается в коллбэке onClose, реализует автоматическое повторное подключение.

Если соединение разорвано из-за проблем с сетью или перезапуска сервиса на стороне клиента, это можно исправить, вызвав этот метод для повторного подключения.

Параметры

$delay

Задержка перед выполнением повторного подключения. Единица измерения - секунды, поддерживает дробные значения, может быть точным до миллисекунд.

Если не передано или значение равно 0, это означает немедленное повторное подключение.

Лучше передавать параметр, чтобы задержать повторное подключение, чтобы избежать чрезмерного потребления процессора из-за проблемы со сторонним сервисом.

Возвращаемое значение

Нет возвращаемых значений

Пример

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) {
        // Если соединение разорвано, повторное подключение через 1 секунду
        $con->reConnect(1);
    };
    $con->connect();
};

Worker::runAll();

Внимание
После успешного повторного подключения, метод $con->onConnect будет вызван снова (если он был установлен). Иногда мы хотим, чтобы метод onConnect выполнялся только один раз, и не вызывался снова после повторного подключения, как показано в следующем примере:

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) {
        // Если соединение разорвано, повторное подключение через 1 секунду
        $con->reConnect(1);
    };
    $con->connect();
};

Worker::runAll();