reConnect 方法
void AsyncTcpConnection::reConnect(float $delay = 0)
(nécessite Workerman version >= 3.3.5)
Reconnecter. Appelé généralement dans le rappel onClose, ce qui permet de réaliser une reconnexion après une déconnexion.
En cas de coupure de connexion due à des problèmes de réseau ou à un redémarrage du service distant, cette méthode peut être utilisée pour tenter une reconnexion.
Paramètre
$delay
Délai avant d’effectuer la reconnexion. L'unité est en secondes, supporte les décimales et peut être précise jusqu'à la milliseconde.
Si non fourni ou si la valeur est 0, cela signifie de se reconnecter immédiatement.
Il est préférable de passer un paramètre pour retarder la reconnexion afin d’éviter une consommation excessive du CPU de la machine locale à cause de problèmes continus du service distant.
Valeur de retour
Aucune valeur de retour
Exemple
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) {
// Si la connexion est coupée, se reconnecter après 1 seconde
$con->reConnect(1);
};
$con->connect();
};
Worker::runAll();
Attention
Après un appel réussi à reconnect, la méthode $con's onConnect sera appelée à nouveau (si elle a été définie). Parfois, nous voulons que la méthode onConnect s'exécute une seule fois et ne soit pas rappelée lors de la reconnexion, comme dans l'exemple suivant :
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) {
// Si la connexion est coupée, se reconnecter après 1 seconde
$con->reConnect(1);
};
$con->connect();
};
Worker::runAll();