reusePort
Dikkat
Bu özellik için workerman>= 3.2.1 PHP>=7.0 gereklidir, Windows sistemi ve Mac OS bu özelliği desteklememektedir.
Açıklama:
bool Worker::$reusePort
Mevcut worker'ın dinleme portu yeniden kullanımını (socket'in SO_REUSEPORT seçeneği) açıp açmadığını ayarlayın.
Dinleme portu yeniden kullanımı açıldığında, ilişkili olmayan birden fazla süreç aynı portu dinleyebilir ve sistem çekirdeği hangi socket bağlantısının hangi süreç tarafından işleneceğine karar vererek yük dengelemesi yapar, bu sayede "stampede effect" (bir arı sürüsü etkisi) önlenir ve çoklu süreç kısa bağlantı uygulamalarının performansı artırılabilir.
Dikkat: Bu özellik için PHP sürümü >=7.0 gereklidir.
Örnek 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'ı çalıştır
Worker::runAll();
Örnek 2: Workerman çoklu port (çoklu protokol) dinleme
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;
// Her bir süreç başlatıldığında mevcut süreçte yeni bir dinleme başlatılır
$worker->onWorkerStart = function($worker)
{
$inner_worker = new Worker('http://0.0.0.0:2016');
/**
* Birden fazla süreç aynı portu dinliyor (dinleme soketi ebeveyn süreçten miras alınmaz)
* Port yeniden kullanımını açmak gerekir, aksi takdirde Address already in use hatası alınır.
*/
$inner_worker->reusePort = true;
$inner_worker->onMessage = 'on_message';
// Dinlemeyi başlat
$inner_worker->listen();
};
$worker->onMessage = 'on_message';
function on_message(TcpConnection $connection, $data)
{
$connection->send("hello\n");
}
// Worker'ı çalıştır
Worker::runAll();