reConnect メソッド

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

(Workermanバージョン>=3.3.5が必要)

再接続を行います。通常は onClose コールバック内で呼び出され、切断時の再接続を実現します。

ネットワークの問題や相手のサービス再起動などの理由で接続が切断された場合、このメソッドを呼び出すことで再接続を行うことができます。

パラメータ

$delay

再接続を実行するまでの遅延時間。単位は秒で、小数点以下もサポートし、ミリ秒まで精度が出せます。

引数を渡さない場合や値が0の場合は、即座に再接続を行います。

再接続の遅延実行を避けるために、可能であればパラメータを渡して、相手のサービスの問題で常に接続できない状態による自機のCPU消費を抑えることを推奨します。

戻り値

戻り値はありません。

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();

注意
reconnect を呼び出して再接続に成功した後、$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();