méthode connect
void AsyncTcpConnection::connect()
Effectue une opération de connexion asynchrone. Cette méthode retourne immédiatement.
Remarque : Si vous avez besoin de définir le rappel onError pour la connexion asynchrone, vous devez le définir avant l'exécution de connect, sinon le rappel onError risque de ne pas être déclenché. Par exemple, dans l'exemple ci-dessous, le rappel onError pourrait ne pas être déclenché, ne pouvant pas capturer l'événement d'échec de la connexion asynchrone.
$connection = new AsyncTcpConnection('tcp://baidu.com:81');
// Le rappel onError n'est pas encore défini lors de l'exécution de la connexion
$connection->connect();
$connection->onError = function($connection, $err_code, $err_msg)
{
echo "$err_code, $err_msg";
};
Paramètres
Pas de paramètres
Valeur de retour
Pas de valeur de retour
Exemple de proxy MySQL
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Adresse mysql réelle, supposons que ce soit le port 3306 de la machine locale
$REAL_MYSQL_ADDRESS = 'tcp://127.0.0.1:3306';
// Le proxy écoute sur le port 4406
$proxy = new Worker('tcp://0.0.0.0:4406');
$proxy->onConnect = function(TcpConnection $connection)
{
global $REAL_MYSQL_ADDRESS;
// Établir une connexion asynchrone au serveur mysql réel
$connection_to_mysql = new AsyncTcpConnection($REAL_MYSQL_ADDRESS);
// Lorsque des données sont reçues de la connexion mysql, les transmettre à la connexion client correspondante
$connection_to_mysql->onMessage = function(AsyncTcpConnection $connection_to_mysql, $buffer)use($connection)
{
$connection->send($buffer);
};
// Lorsque la connexion mysql se ferme, fermer la connexion correspondante au client proxy
$connection_to_mysql->onClose = function(AsyncTcpConnection $connection_to_mysql)use($connection)
{
$connection->close();
};
// En cas d'erreur sur la connexion mysql, fermer la connexion correspondante au client proxy
$connection_to_mysql->onError = function(AsyncTcpConnection $connection_to_mysql)use($connection)
{
$connection->close();
};
// Exécuter la connexion asynchrone
$connection_to_mysql->connect();
// Lorsque des données sont reçues du client, les transmettre à la connexion mysql correspondante
$connection->onMessage = function(TcpConnection $connection, $buffer)use($connection_to_mysql)
{
$connection_to_mysql->send($buffer);
};
// Lorsque la connexion du client se ferme, fermer la connexion mysql correspondante
$connection->onClose = function(TcpConnection $connection)use($connection_to_mysql)
{
$connection_to_mysql->close();
};
// En cas d'erreur sur la connexion du client, fermer la connexion mysql correspondante
$connection->onError = function(TcpConnection $connection)use($connection_to_mysql)
{
$connection_to_mysql->close();
};
};
// Exécuter le worker
Worker::runAll();
Test
mysql -uroot -P4406 -h127.0.0.1 -p
Bienvenue dans le moniteur MySQL. Les commandes se terminent par ; ou \g.
Votre identifiant de connexion MySQL est 25004
Version du serveur : 5.5.31-1~dotdeb.0 (Debian)
Copyright (c) 2000, 2013, Oracle et/ou ses filiales. Tous droits réservés.
Oracle est une marque déposée d'Oracle Corporation et/ou de ses
filiales. D'autres noms peuvent être des marques de leurs propriétaires respectifs.
Tapez 'help;' ou '\h' pour obtenir de l'aide. Tapez '\c' pour effacer l'instruction actuelle.
mysql>