reConnect 方法

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

(ต้องการเวอร์ชัน Workerman >= 3.3.5)

ทำการเชื่อมต่อใหม่ โดยปกติจะเรียกใช้งานในonClose callback เพื่อทำการเชื่อมต่อใหม่เมื่อการเชื่อมต่อถูกตัดขาด

เมื่อการเชื่อมต่อถูกตัดขาดเนื่องจากปัญหาทางเครือข่ายหรือการรีสตาร์ทบริการที่อยู่ฝั่งตรงข้าม สามารถเรียกใช้วิธีนี้เพื่อทำการเชื่อมต่อใหม่

พารามิเตอร์

$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 และเชื่อมต่อใหม่สำเร็จแล้ว วิธี onConnect ของ $con จะถูกเรียกใช้งานอีกครั้ง (หากมีการตั้งค่าไว้) บางครั้งเราอาจต้องการให้ 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();