طريقة connect
void AsyncTcpConnection::connect()
ينفذ عملية الاتصال غير المتزامن. ستعيد هذه الطريقة القيمة على الفور.
ملاحظة: إذا كنت بحاجة إلى تعيين دالة رد النداء onError للاتصال غير المتزامن، فيجب تعيينها قبل تنفيذ connect، وإلا فقد لا يتم استدعاء دالة رد النداء onError، على سبيل المثال في المثال أدناه، قد لا يتم استدعاء دالة رد النداء onError، ولا يمكن التقاط حدث فشل الاتصال غير المتزامن.
$connection = new AsyncTcpConnection('tcp://baidu.com:81');
// أثناء تنفيذ الاتصال لم يتم تعيين دالة رد النداء 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>