Die connect-Methode
void AsyncTcpConnection::connect()
Führt eine asynchrone Verbindung durch. Diese Methode gibt sofort zurück.
Hinweis: Wenn das onError-Rückruf für die asynchrone Verbindung festgelegt werden soll, sollte dies vor dem Aufruf von connect erfolgen. Andernfalls wird der onError-Rückruf möglicherweise nicht ausgelöst. Im folgenden Beispiel wird der onError-Rückruf möglicherweise nicht ausgelöst, da er nicht festgelegt wurde, bevor die Verbindung hergestellt wurde.
$connection = new AsyncTcpConnection('tcp://baidu.com:81');
// Der onError-Rückruf wurde noch nicht festgelegt, als die Verbindung hergestellt wurde
$connection->connect();
$connection->onError = function($connection, $err_code, $err_msg)
{
echo "$err_code, $err_msg";
};
Parameter
Keine Parameter
Rückgabewert
Kein Rückgabewert
Beispiel für MySQL-Proxy
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Die tatsächliche MySQL-Adresse, angenommen, sie befindet sich auf Port 3306 des lokalen Computers
$REAL_MYSQL_ADDRESS = 'tcp://127.0.0.1:3306';
// Der Proxy lauscht auf Port 4406 des lokalen Computers
$proxy = new Worker('tcp://0.0.0.0:4406');
$proxy->onConnect = function(TcpConnection $connection)
{
global $REAL_MYSQL_ADDRESS;
// Asynchrone Verbindung zum tatsächlichen MySQL-Server herstellen
$connection_to_mysql = new AsyncTcpConnection($REAL_MYSQL_ADDRESS);
// Wenn Daten von der MySQL-Verbindung empfangen werden, leite sie an die entsprechende Client-Verbindung weiter
$connection_to_mysql->onMessage = function(AsyncTcpConnection $connection_to_mysql, $buffer) use($connection)
{
$connection->send($buffer);
};
// Wenn die MySQL-Verbindung geschlossen wird, wird auch die entsprechende Verbindung zum Client geschlossen
$connection_to_mysql->onClose = function(AsyncTcpConnection $connection_to_mysql) use($connection)
{
$connection->close();
};
// Wenn bei der MySQL-Verbindung ein Fehler auftritt, wird auch die entsprechende Verbindung zum Client geschlossen
$connection_to_mysql->onError = function(AsyncTcpConnection $connection_to_mysql) use($connection)
{
$connection->close();
};
// Asynchrone Verbindung herstellen
$connection_to_mysql->connect();
// Wenn Daten vom Client empfangen werden, leite sie an die entsprechende MySQL-Verbindung weiter
$connection->onMessage = function(TcpConnection $connection, $buffer) use($connection_to_mysql)
{
$connection_to_mysql->send($buffer);
};
// Wenn die Client-Verbindung getrennt wird, wird auch die entsprechende MySQL-Verbindung geschlossen
$connection->onClose = function(TcpConnection $connection) use($connection_to_mysql)
{
$connection_to_mysql->close();
};
// Wenn bei der Client-Verbindung ein Fehler auftritt, wird auch die entsprechende MySQL-Verbindung geschlossen
$connection->onError = function(TcpConnection $connection) use($connection_to_mysql)
{
$connection_to_mysql->close();
};
};
// Worker ausführen
Worker::runAll();
Test
mysql -uroot -P4406 -h127.0.0.1 -p
Willkommen zur MySQL-Monitorschnittstelle. Befehle enden mit ; oder \g.
Ihre MySQL-Server-Version ist 5.5.31-1~dotdeb.0 (Debian).
Urheberrecht © 2000, 2013, Oracle und/oder Tochtergesellschaften. Alle Rechte vorbehalten.
Oracle ist ein eingetragenes Warenzeichen der Oracle Corporation und/oder ihrer
Tochtergesellschaften. Andere Namen können Warenzeichen ihrer jeweiligen
Eigentümer sein.
Geben Sie 'help;' oder '\h' für Hilfe ein. Geben Sie '\c' ein, um die aktuelle Eingabeanweisung zu löschen.
mysql>