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