Método connect
void AsyncTcpConnection::connect()
Realiza una operación de conexión asincrónica. Este método devuelve de inmediato.
Nota: Si es necesario configurar el callback onError para la conexión asincrónica, debe hacerse antes de llamar a connect. De lo contrario, es posible que el callback onError no se active. Por ejemplo, en el siguiente caso, el callback onError puede no activarse y no capturar el evento de falla en la conexión asincrónica.
$connection = new AsyncTcpConnection('tcp://baidu.com:81');
// El onError callback no ha sido configurado antes de realizar la conexión
$connection->connect();
$connection->onError = function($connection, $err_code, $err_msg)
{
echo "$err_code, $err_msg";
};
Parámetros
Sin parámetros
Valor de retorno
Sin valor de retorno
Ejemplo de proxy Mysql
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Dirección real de mysql, asumiendo que está en el puerto 3306 de esta máquina
$REAL_MYSQL_ADDRESS = 'tcp://127.0.0.1:3306';
// El servidor proxy escucha en el puerto 4406 del localhost
$proxy = new Worker('tcp://0.0.0.0:4406');
$proxy->onConnect = function(TcpConnection $connection)
{
global $REAL_MYSQL_ADDRESS;
// Establece una conexión asincrónica con el servidor mysql real
$connection_to_mysql = new AsyncTcpConnection($REAL_MYSQL_ADDRESS);
// Cuando la conexión mysql envía un mensaje, reenviarlo a la conexión del cliente correspondiente
$connection_to_mysql->onMessage = function(AsyncTcpConnection $connection_to_mysql, $buffer)use($connection)
{
$connection->send($buffer);
};
// Cuando la conexión mysql se cierra, cierra la conexión proxy correspondiente al cliente
$connection_to_mysql->onClose = function(AsyncTcpConnection $connection_to_mysql)use($connection)
{
$connection->close();
};
// Cuando hay un error en la conexión mysql, cierra la conexión proxy correspondiente al cliente
$connection_to_mysql->onError = function(AsyncTcpConnection $connection_to_mysql)use($connection)
{
$connection->close();
};
// Realiza la conexión asincrónica
$connection_to_mysql->connect();
// Cuando el cliente envía un mensaje, reenviarlo a la conexión mysql correspondiente
$connection->onMessage = function(TcpConnection $connection, $buffer)use($connection_to_mysql)
{
$connection_to_mysql->send($buffer);
};
// Cuando se cierra la conexión del cliente, cierra la conexión mysql correspondiente
$connection->onClose = function(TcpConnection $connection)use($connection_to_mysql)
{
$connection_to_mysql->close();
};
// Cuando hay un error en la conexión del cliente, cierra la conexión mysql correspondiente
$connection->onError = function(TcpConnection $connection)use($connection_to_mysql)
{
$connection_to_mysql->close();
};
};
// Ejecutar el worker
Worker::runAll();
Prueba
mysql -uroot -P4406 -h127.0.0.1 -p
Bienvenido al monitor de MySQL. Los comandos terminan con ';' o '\g'.
El ID de conexión de MySQL es 25004
Versión del servidor: 5.5.31-1~dotdeb.0 (Debian)
Copyright (c) 2000, 2013, Oracle y/o sus filiales. Todos los derechos reservados.
Oracle es una marca registrada de Oracle Corporation y/o sus filiales.
Otros nombres pueden ser marcas comerciales de sus respectivos propietarios.
Escriba 'help;' o '\h' para obtener ayuda. Escriba '\c' para borrar la declaración de entrada actual.
mysql>