কাস্টম প্রক্রিয়া

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, // request ক্লাস সেটিং
            'logger' => \support\Log::channel('default'), // লগ উদাহরণ
            'appPath' => app_path(), // app ডিরেক্টরি অবস্থান
            'publicPath' => public_path() // public ডিরেক্টরি অবস্থান
        ]
    ]
];

স্মরণ
যদি আপনি 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,
        // শোনা প্রোটোকল আইП ​​এবং পোর্ট (অপশনাল)
        '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 কলব্যাককে ক্লাসের পদ্ধতির মাধ্যমে বাস্তবায়ন করে, অন্যান্য ব্যবহার কর্মপদ্ধতির সাথে পুরোপুরি একই।