Phương thức reConnect
void AsyncTcpConnection::reConnect(float $delay = 0)
(Yêu cầu phiên bản Workerman >= 3.3.5)
Kết nối lại. Thường được gọi trong callback onClose, để thực hiện việc kết nối lại sau khi bị ngắt.
Nếu kết nối bị ngắt do vấn đề mạng hoặc dịch vụ bên kia khởi động lại, có thể gọi phương thức này để kết nối lại.
Tham số
$delay
Thời gian trì hoãn trước khi thực hiện kết nối lại. Đơn vị tính là giây, hỗ trợ số thập phân, có thể chính xác đến mili giây.
Nếu không truyền tham số hoặc giá trị bằng 0 thì có nghĩa là kết nối lại ngay lập tức.
Tốt nhất nên truyền tham số để thực hiện việc kết nối lại sau một khoảng thời gian, tránh việc tiêu tốn CPU quá cao của máy do vấn đề dịch vụ bên kia không thể kết nối.
Giá trị trả về
Không có giá trị trả về
Ví dụ
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) {
// Nếu kết nối bị ngắt, hãy kết nối lại sau 1 giây
$con->reConnect(1);
};
$con->connect();
};
Worker::runAll();
Lưu ý
Khi gọi reconnect thành công, phương thức $con->onConnect sẽ được gọi lại (nếu có thiết lập). Đôi khi chúng ta muốn phương thức onConnect chỉ thực hiện một lần, không thực hiện lại khi kết nối lại, tham khảo ví dụ dưới đây:
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) {
// Nếu kết nối bị ngắt, hãy kết nối lại sau 1 giây
$con->reConnect(1);
};
$con->connect();
};
Worker::runAll();