返回介绍

1.8.2.6 reusePort

发布于 2020-05-17 11:52:40 字数 3181 浏览 989 评论 0 收藏 0

要求(workerman >= 3.2.1 并且 PHP>=7.0)

说明:

bool Worker::$reusePort

设置当前worker是否开启监听端口复用(socket的SO_REUSEPORT选项)。

开启监听端口复用后允许多个无亲缘关系的进程监听相同的端口,并且由系统内核做负载均衡,决定将socket连接交给哪个进程处理,避免了惊群效应,可以提升多进程短连接应用的性能。

注意: 此特性需要PHP版本>=7.0

注意: 从workerman 3.5.21版本开始默认开启此选项。之前版本需要手动设置Worker::$reusePort=true;开启。

范例 1

use WorkermanWorker;
require_once __DIR__ . '/Workerman/Autoloader.php';

$worker = new Worker('websocket://0.0.0.0:8484');
$worker->count = 4;
$worker->reusePort = true;
$worker->onMessage = function($connection, $data)
{
    $connection->send('ok');
};
// 运行worker
Worker::runAll();

范例2:workerman多端口(多协议)监听

use WorkermanWorker;
require_once __DIR__ . '/Workerman/Autoloader.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($connection, $data)
{
    $connection->send("hellon");
}

// 运行worker
Worker::runAll();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文