connect 방법
void AsyncTcpConnection::connect()
비동기 연결 작업을 수행합니다. 이 메소드는 즉시 반환됩니다.
주의: 비동기 연결의 onError 콜백을 설정해야 하는 경우, connect 실행 이전에 설정해야 하며, 그렇지 않으면 onError 콜백이 트리거되지 않을 수 있습니다. 예를 들어 아래의 경우 onError 콜백이 트리거되지 않아 비동기 연결 실패 이벤트를 잡을 수 없습니다.
$connection = new AsyncTcpConnection('tcp://baidu.com:81');
// 연결 실행 시점에 ainda onError 콜백을 설정하지 않았습니다.
$connection->connect();
$connection->onError = function($connection, $err_code, $err_msg)
{
echo "$err_code, $err_msg";
};
매개변수
매개변수 없음
반환 값
반환 값 없음
예제 Mysql 프록시
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// 실제 MySQL 주소, 여기서는 로컬의 3306 포트라고 가정합니다.
$REAL_MYSQL_ADDRESS = 'tcp://127.0.0.1:3306';
// 프록시가 로컬 4406 포트를 수신 대기합니다.
$proxy = new Worker('tcp://0.0.0.0:4406');
$proxy->onConnect = function(TcpConnection $connection)
{
global $REAL_MYSQL_ADDRESS;
// 실제 MySQL 서버에 대한 비동기 연결 설정
$connection_to_mysql = new AsyncTcpConnection($REAL_MYSQL_ADDRESS);
// MySQL 연결에서 데이터가 올 때, 해당 클라이언트 연결로 포워딩
$connection_to_mysql->onMessage = function(AsyncTcpConnection $connection_to_mysql, $buffer)use($connection)
{
$connection->send($buffer);
};
// MySQL 연결이 닫힐 때, 해당 프록시에서 클라이언트 연결 종료
$connection_to_mysql->onClose = function(AsyncTcpConnection $connection_to_mysql)use($connection)
{
$connection->close();
};
// MySQL 연결에서 오류가 발생할 때, 해당 프록시에서 클라이언트 연결 종료
$connection_to_mysql->onError = function(AsyncTcpConnection $connection_to_mysql)use($connection)
{
$connection->close();
};
// 비동기 연결 실행
$connection_to_mysql->connect();
// 클라이언트에서 데이터가 올 때, 해당 MySQL 연결로 포워딩
$connection->onMessage = function(TcpConnection $connection, $buffer)use($connection_to_mysql)
{
$connection_to_mysql->send($buffer);
};
// 클라이언트 연결이 끊어질 때, 해당 MySQL 연결 끊기
$connection->onClose = function(TcpConnection $connection)use($connection_to_mysql)
{
$connection_to_mysql->close();
};
// 클라이언트 연결에서 오류가 발생할 때, 해당 MySQL 연결 끊기
$connection->onError = function(TcpConnection $connection)use($connection_to_mysql)
{
$connection_to_mysql->close();
};
};
// 워커 실행
Worker::runAll();
테스트
mysql -uroot -P4406 -h127.0.0.1 -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 25004
Server version: 5.5.31-1~dotdeb.0 (Debian)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>