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