reusePort

ملاحظة
يتطلب workerman>= 3.2.1 و PHP>=7.0، لا يدعم هذا الميزة نظام Windows و Mac OS

الشرح:

bool Worker::$reusePort

يحدد ما إذا كان worker الحالي يفتح إعادة استخدام المنفذ الاستماعي (خيار SO_REUSEPORT للسوكت).

عند فتح إعادة استخدام المنفذ الاستماعي، يسمح لعدة عمليات غير مرتبطة بالاستماع على نفس المنفذ، ويتم تحديد من قبل نواة النظام من سيعالج اتصالات السوكت، مما يتجنب تأثير الاستجابة الجماعية، ويمكن أن يحسن أداء التطبيقات ذات الاتصال القصير المتعددة العمليات.

ملاحظة: يتطلب هذا الميزة إصدار PHP>=7.0

المثال 1

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('websocket://0.0.0.0:8484');
$worker->count = 4;
$worker->reusePort = true;
$worker->onMessage = function(TcpConnection $connection, $data)
{
    $connection->send('ok');
};
// تشغيل العامل
Worker::runAll();

المثال 2: الاستماع للعديد من المنافذ (بروتوكولات متعددة) في workerman

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('text://0.0.0.0:2015');
$worker->count = 4;
// بعد بدء كل عملية، يضيف عملية مراقبة جديدة في العملية الحالية
$worker->onWorkerStart = function($worker)
{
    $inner_worker = new Worker('http://0.0.0.0:2016');
    /**
     * عدة عمليات تستمع لنفس المنفذ (سوكت الاستماع ليست مشتقة من العملية الأب)
     * تحتاج إلى تفعيل إعادة استخدام المنفذ، وإلا ستظهر خطأ Address already in use
     */
    $inner_worker->reusePort = true;
    $inner_worker->onMessage = 'on_message';
    // تنفيذ الاستماع
    $inner_worker->listen();
};

$worker->onMessage = 'on_message';

function on_message(TcpConnection $connection, $data)
{
    $connection->send("hello\n");
}

// تشغيل العامل
Worker::runAll();