国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

自定義進(jìn)程

在webman中你可以像workerman那樣自定義監(jiān)聽或者進(jìn)程。

注意
windows用戶需要使用 php windows.php 啟動webman才能啟動自定義進(jìn)程。

自定義http服務(wù)

有時(shí)候你可能有某種特殊的需求,需要更改webman http服務(wù)的內(nèi)核代碼,這時(shí)可以采用自定義進(jìn)程來實(shí)現(xiàn)。

例如新建 app\Server.php

<?php

namespace app;

use Webman\App;

class Server extends App
{
    // 這里重寫 Webman\App 里的方法
}

config/process.php中添加如下配置

use Workerman\Worker;

return [
    // ... 這里省略了其它配置...

    'my-http' => [
        'handler' => app\Server::class,
        'listen' => 'http://0.0.0.0:8686',
        'count' => 8, // 進(jìn)程數(shù)
        'user' => '',
        'group' => '',
        'reusePort' => true,
        'constructor' => [
            'requestClass' => \support\Request::class, // request類設(shè)置
            'logger' => \support\Log::channel('default'), // 日志實(shí)例
            'appPath' => app_path(), // app目錄位置
            'publicPath' => public_path() // public目錄位置
        ]
    ]
];

提示
如果想關(guān)閉webman自帶的http進(jìn)程,只需要在 config/server.php 里設(shè)置 listen=>''

自定義websocket監(jiān)聽例子

新建 app/Pusher.php

<?php
namespace app;

use Workerman\Connection\TcpConnection;

class Pusher
{
    public function onConnect(TcpConnection $connection)
    {
        echo "onConnect\n";
    }

    public function onWebSocketConnect(TcpConnection $connection, $http_buffer)
    {
        echo "onWebSocketConnect\n";
    }

    public function onMessage(TcpConnection $connection, $data)
    {
        $connection->send($data);
    }

    public function onClose(TcpConnection $connection)
    {
        echo "onClose\n";
    }
}

注意:所有onXXX屬性均為public

config/process.php中添加如下配置

return [
    // ... 其它進(jìn)程配置省略 ...

    // websocket_test 為進(jìn)程名稱
    'websocket_test' => [
        // 這里指定進(jìn)程類,就是上面定義的Pusher類
        'handler' => app\Pusher::class,
        'listen'  => 'websocket://0.0.0.0:8888',
        'count'   => 1,
    ],
];

自定義非監(jiān)聽進(jìn)程例子

新建 app/TaskTest.php

<?php
namespace app;

use Workerman\Timer;
use support\Db;

class TaskTest
{

    public function onWorkerStart()
    {
        // 每隔10秒檢查一次數(shù)據(jù)庫是否有新用戶注冊
        Timer::add(10, function(){
            Db::table('users')->where('regist_timestamp', '>', time()-10)->get();
        });
    }

}

config/process.php中添加如下配置

return [
    // ... 其它進(jìn)程配置省略

    'task' => [
        'handler'  => app\TaskTest::class
    ],
];

注意:listen省略則不監(jiān)聽任何端口,count省略則進(jìn)程數(shù)默認(rèn)為1。

配置文件說明

一個(gè)進(jìn)程完整的配置定義如下:

return [
    // ... 

    // websocket_test 為進(jìn)程名稱
    'websocket_test' => [
        // 這里指定進(jìn)程類
        'handler' => app\Pusher::class,
        // 監(jiān)聽的協(xié)議 ip 及端口 (可選)
        'listen'  => 'websocket://0.0.0.0:8888',
        // 進(jìn)程數(shù) (可選,默認(rèn)1)
        'count'   => 2,
        // 進(jìn)程運(yùn)行用戶 (可選,默認(rèn)當(dāng)前用戶)
        'user'    => '',
        // 進(jìn)程運(yùn)行用戶組 (可選,默認(rèn)當(dāng)前用戶組)
        'group'   => '',
        // 當(dāng)前進(jìn)程是否支持reload (可選,默認(rèn)true)
        'reloadable' => true,
        // 是否開啟reusePort (可選,此選項(xiàng)需要php>=7.0,默認(rèn)為true)
        'reusePort'  => true,
        // transport (可選,當(dāng)需要開啟ssl時(shí)設(shè)置為ssl,默認(rèn)為tcp)
        'transport'  => 'tcp',
        // context (可選,當(dāng)transport為是ssl時(shí),需要傳遞證書路徑)
        'context'    => [], 
        // 進(jìn)程類構(gòu)造函數(shù)參數(shù),這里為 process\Pusher::class 類的構(gòu)造函數(shù)參數(shù) (可選)
        'constructor' => [],
        //當(dāng)前進(jìn)程是否啟用(可選,默認(rèn)true,此選項(xiàng)需webman-framework>=1.6.0)
        'enable' => true
    ],
];

總結(jié)

webman的自定義進(jìn)程實(shí)際上就是workerman的一個(gè)簡單封裝,它將配置與業(yè)務(wù)分離,并且將workerman的onXXX回調(diào)通過類的方法來實(shí)現(xiàn),其它用法與workerman完全相同。

編輯于2025-02-06 22:13:07 完善本頁 +發(fā)起討論
贊助商