connect Methode
void AsyncTcpConnection::connect()
Führt eine asynchrone Verbindungsoperation aus. Diese Methode gibt sofort zurück.
Hinweis: Wenn der onError-Callback für die asynchrone Verbindung festgelegt werden muss, sollte dies vor der Ausführung von connect erfolgen, andernfalls wird der onError-Callback möglicherweise nicht ausgelöst. Im folgenden Beispiel kann der onError-Callback möglicherweise nicht ausgelöst werden, was dazu führt, dass das Ereignis des Fehlschlags der asynchronen Verbindung nicht erfasst wird.
$connection = new AsyncTcpConnection('tcp://baidu.com:81');
// onError-Callback wurde beim Verbindungsaufbau noch nicht gesetzt
$connection->connect();
$connection->onError = function($connection, $err_code, $err_msg)
{
echo "$err_code, $err_msg";
};
Parameter
Keine Parameter
Rückgabewert
Kein Rückgabewert
Beispiel Mysql-Proxy
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Tatsächliche mysql-Adresse, angenommen, dies ist der lokale Port 3306
$REAL_MYSQL_ADDRESS = 'tcp://127.0.0.1:3306';
// Proxy hört auf lokalem Port 4406
$proxy = new Worker('tcp://0.0.0.0:4406');
$proxy->onConnect = function(TcpConnection $connection)
{
global $REAL_MYSQL_ADDRESS;
// Asynchron eine Verbindung zum tatsächlichen mysql-Server herstellen
$connection_to_mysql = new AsyncTcpConnection($REAL_MYSQL_ADDRESS);
// Wenn die mysql-Verbindung Daten sendet, an die entsprechende Client-Verbindung weiterleiten
$connection_to_mysql->onMessage = function(AsyncTcpConnection $connection_to_mysql, $buffer)use($connection)
{
$connection->send($buffer);
};
// Wenn die mysql-Verbindung geschlossen wird, die entsprechende Proxy-Verbindung zum Client schließen
$connection_to_mysql->onClose = function(AsyncTcpConnection $connection_to_mysql)use($connection)
{
$connection->close();
};
// Wenn ein Fehler bei der mysql-Verbindung auftritt, die entsprechende Proxy-Verbindung zum Client schließen
$connection_to_mysql->onError = function(AsyncTcpConnection $connection_to_mysql)use($connection)
{
$connection->close();
};
// Asynchrone Verbindung herstellen
$connection_to_mysql->connect();
// Wenn der Client Daten sendet, an die entsprechende mysql-Verbindung weiterleiten
$connection->onMessage = function(TcpConnection $connection, $buffer)use($connection_to_mysql)
{
$connection_to_mysql->send($buffer);
};
// Wenn die Client-Verbindung unterbrochen wird, die entsprechende mysql-Verbindung unterbrechen
$connection->onClose = function(TcpConnection $connection)use($connection_to_mysql)
{
$connection_to_mysql->close();
};
// Wenn ein Fehler bei der Client-Verbindung auftritt, die entsprechende mysql-Verbindung unterbrechen
$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 beim MySQL-Überwachungsmonitor. Befehle enden mit ; oder \g.
Ihre MySQL-Verbindungs-ID ist 25004
Serverversion: 5.5.31-1~dotdeb.0 (Debian)
Copyright (c) 2000, 2013, Oracle und/oder dessen Tochtergesellschaften. Alle Rechte vorbehalten.
Oracle ist eine eingetragene Marke von Oracle Corporation und/oder deren
Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen
Eigentümer sein.
Geben Sie 'help;' oder '\h' ein, um Hilfe zu erhalten. Geben Sie '\c' ein, um die aktuelle Eingabedatei zu löschen.
mysql>