reusePort
Lưu ý
Cần workerman>= 3.2.1 PHP>=7.0, không hỗ trợ tính năng này trên hệ thống Windows và Mac OS.
Giải thích:
bool Worker::$reusePort
Thiết lập xem worker hiện tại có mở tính năng tái sử dụng cổng lắng nghe (tùy chọn SO_REUSEPORT của socket) hay không.
Khi mở tính năng tái sử dụng cổng lắng nghe, cho phép nhiều tiến trình không có mối quan hệ lắng nghe trên cùng một cổng, và hệ điều hành sẽ thực hiện phân phối tải, quyết định kết nối socket nào được giao cho tiến trình nào xử lý, tránh được hiện tượng "ngạc nhiên nhóm", có thể cải thiện hiệu suất của ứng dụng kết nối ngắn nhiều tiến trình.
Lưu ý: Tính năng này yêu cầu phiên bản PHP>=7.0
Ví dụ 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');
};
// Chạy worker
Worker::runAll();
Ví dụ 2: workerman lắng nghe nhiều cổng (nhiều giao thức)
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;
// Mỗi tiến trình khởi động sẽ thêm một lắng nghe mới trong tiến trình hiện tại
$worker->onWorkerStart = function($worker)
{
$inner_worker = new Worker('http://0.0.0.0:2016');
/**
* Nhiều tiến trình lắng nghe cùng một cổng (socket lắng nghe không kế thừa từ tiến trình cha)
* Cần mở tính năng tái sử dụng cổng, nếu không sẽ gặp lỗi Address already in use
*/
$inner_worker->reusePort = true;
$inner_worker->onMessage = 'on_message';
// Thực hiện lắng nghe
$inner_worker->listen();
};
$worker->onMessage = 'on_message';
function on_message(TcpConnection $connection, $data)
{
$connection->send("hello\n");
}
// Chạy worker
Worker::runAll();