طريقة 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();
ملاحظة
بعد استدعاء reconnect والاتصال بنجاح، سيتم استدعاء طريقة $con's 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();