अनुकूलित प्रक्रिया

Webman में आप Workerman की तरह कस्टम लिसनिंग या प्रोसेस तैयार कर सकते हैं।

नोट
Windows उपयोगकर्ताओं को कस्टम प्रक्रिया शुरू करने के लिए php windows.php का उपयोग करके Webman शुरू करना होगा।

अनुकूलित HTTP सेवा

कभी-कभी आपके पास कोई विशेष आवश्यकता हो सकती है, जिसके लिए Webman HTTP सेवा के कोर कोड को बदलना आवश्यक है, ऐसी स्थिति में आप अनुकूलित प्रक्रिया का उपयोग कर सकते हैं।

उदाहरण के लिए, नया फ़ाइल बनाएं 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, // प्रक्रिया संख्या
        'user' => '',
        'group' => '',
        'reusePort' => true,
        'constructor' => [
            'requestClass' => \support\Request::class, // अनुरोध वर्ग सेटिंग
            'logger' => \support\Log::channel('default'), // लॉग उदाहरण
            'appPath' => app_path(), // ऐप निर्देशिका स्थान
            'publicPath' => public_path() // सार्वजनिक निर्देशिका स्थान
        ]
    ]
];

सूचना
यदि आप Webman द्वारा प्रदान की गई HTTP प्रक्रिया को बंद करना चाहते हैं, तो बस config/server.php में listen=>'' सेट करें।

अनुकूलित WebSocket लिसनिंग उदाहरण

नया फ़ाइल बनाएं 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 विशेषताएँ सार्वजनिक हैं

config/process.php में निम्नलिखित कॉन्फ़िगरेशन जोड़ें

return [
    // ... अन्य प्रक्रिया कॉन्फ़िगरेशन छोड़ दिया गया ...

    // websocket_test प्रक्रिया का नाम है
    'websocket_test' => [
        // यहाँ प्रक्रिया वर्ग निर्दिष्ट करें, जो ऊपर परिभाषित Pusher वर्ग है
        'handler' => app\Pusher::class,
        'listen'  => 'websocket://0.0.0.0:8888',
        'count'   => 1,
    ],
];

अनुकूलित गैर-लिसनिंग प्रक्रिया उदाहरण

नया फ़ाइल बनाएं app/TaskTest.php

<?php
namespace app;

use Workerman\Timer;
use support\Db;

class TaskTest
{

    public function onWorkerStart()
    {
        // हर 10 सेकंड में जांचें कि क्या डेटाबेस में नए उपयोगकर्ता पंजीकृत हैं
        Timer::add(10, function(){
            Db::table('users')->where('regist_timestamp', '>', time()-10)->get();
        });
    }

}

config/process.php में निम्नलिखित कॉन्फ़िगरेशन जोड़ें

return [
    // ... अन्य प्रक्रिया कॉन्फ़िगरेशन छोड़ दिया गया

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

नोट: listen को छोड़ने पर कोई पोर्ट नहीं सुना जाएगा, count को छोड़ने पर प्रक्रिया की संख्या डिफ़ॉल्ट रूप से 1 होती है।

कॉन्फ़िगरेशन फ़ाइल का विवरण

एक प्रक्रिया की पूर्ण कॉन्फ़िगरेशन परिभाषा इस प्रकार है:

return [
    // ... 

    // websocket_test प्रक्रिया का नाम है
    'websocket_test' => [
        // यहाँ प्रक्रिया वर्ग निर्दिष्ट करें
        'handler' => app\Pusher::class,
        // लिसनिंग प्रोटोकॉल IP और पोर्ट (वैकल्पिक)
        'listen'  => 'websocket://0.0.0.0:8888',
        // प्रक्रिया संख्या (वैकल्पिक, डिफ़ॉल्ट 1)
        'count'   => 2,
        // प्रक्रिया चलाने वाला उपयोगकर्ता (वैकल्पिक, डिफ़ॉल्ट वर्तमान उपयोगकर्ता)
        'user'    => '',
        // प्रक्रिया चलाने वाला समूह (वैकल्पिक, डिफ़ॉल्ट वर्तमान समूह)
        'group'   => '',
        // क्या वर्तमान प्रक्रिया पुनः लोड का समर्थन करती है (वैकल्पिक, डिफ़ॉल्ट true)
        'reloadable' => true,
        // क्या reusePort सक्षम है
        'reusePort'  => true,
        // परिवहन (वैकल्पिक, जब ssl सक्षम करना हो तो इसे ssl पर सेट करें, डिफ़ॉल्ट tcp)
        'transport'  => 'tcp',
        // संदर्भ (वैकल्पिक, जब परिवहन ssl हो, तो प्रमाणपत्र पथ प्रदान करना आवश्यक है)
        'context'    => [], 
        // प्रक्रिया वर्ग के कंस्ट्रक्टर के पैरामीटर, यहाँ process\Pusher::class वर्ग के कंस्ट्रक्टर के पैरामीटर (वैकल्पिक)
        'constructor' => [],
        // क्या वर्तमान प्रक्रिया सक्षम है
        'enable' => true
    ],
];

निष्कर्ष

Webman की अनुकूलित प्रक्रिया वास्तव में Workerman का एक सरल रैपर है, जो कॉन्फ़िगरेशन और व्यवसाय को अलग करता है, और Workerman के onXXX कॉलबैक को वर्ग की विधियों के माध्यम से लागू करता है, अन्य उपयोग विधियाँ Workerman के साथ पूरी तरह से समान हैं।