1.5 আপগ্রেড গাইড
আপগ্রেড করার আগে ব্যাকআপ নিন, নিম্নোক্ত কমান্ড দিয়ে আপগ্রেড করুন
composer require workerman/webman-framework ^1.5 -W && composer require webman/console ^1.2.12 && php webman install
বৈশিষ্ট্য এবং পরিবর্তন
workerman v5 করোম সমর্থন করে
সতর্কতা
workerman v5 এর জন্য পিএইচপি>=8.1 প্রয়োজন
workerman আপগ্রেড কমান্ডcomposer require workerman/workerman ^5.0.0 -W
Fiber করোম ইনস্টলেশন প্রয়োজনcomposer require revolt/event-loop ^1.0.0
উদাহরণ
হ্রাসকর প্রতিক্রিয়া
<?php
namespace app\controller;
use support\Request;
use Workerman\Timer;
class TestController
{
public function index(Request $request)
{
// 1.5 সেকেন্ড শুতে যান
Timer::sleep(1.5);
return $request->getRemoteIp();
}
}
Timer::sleep()
এ PHPনিজস্বের sleep()
ফাংশনের মতো, পার্থক্য হল Timer::sleep()
প্রসেস ব্লক করে না
এইচটিটিপি রিকুয়েষ্ট পাঠানো
দ্বিধা
ইনস্টল করা প্রয়োজনি হয়composer require workerman/http-client ^2.0.0
<?php
namespace app\controller;
use support\Request;
use Workerman\Http\Client;
class TestController
{
public function index(Request $request)
{
static $client;
$client = $client ?: new Client();
$response = $client->get('http://example.com'); // সিঙ্ক্রোনাস পদ্ধতিতে এইচটিটিপি রিকুয়েষ্ট প্রেরণ
return $response->getBody()->getContents();
}
}
একইভাবে $client->get()
রিকুয়েস্টে ব্লক হয় না, এটি webman এ ব্লক না করে এইচটিটিপি রিকুয়েস্ট প্রস্তুত করতে ব্যবহার করা যেতে পারে।
আরো দেখুন workerman/http-client
support\Context ক্লাস যুক্ত হল
support\Context ক্লাস ব্যবহার করা হয় রিকুয়েস্ট সম্পর্কিত ডেটা সংরক্ষণের জন্য, যখন রিকুয়েস্ট সম্পন্ন হয়, বিদ্যমান context ডেটা স্বয়ংক্রিয়ভাবে মুছে যাবে। এটা বলা যায় যে context ডেটার জীবনকাল রিকুয়েস্টের জীবনকালের সাথে যুক্ত রয়েছে।
গ্লোবাল ভেরিয়েবল প্রলুদ্ধি
করোম পরিবেশে প্রান্তিক স্থিতির তথ্য গ্লোবাল ভেরিয়েবল বা স্থায়ী ভেরিয়েবলে রাখা নিষিদ্ধ, কারণ এটি পূর্ণাঙ্গ তথ্য প্রলূদ সৃষ্টি করতে পারে, উদাহরণরূপ,
<?php
namespace app\controller;
use support\Request;
use Workerman\Timer;
class TestController
{
protected static $name = '';
public function index(Request $request)
{
static::$name = $request->get('name');
Timer::sleep(5);
return static::$name;
}
}
প্রক্রিয়া সংখ্যা একটি হলে, আমরা দুটি অনুরোধ সারি জাতীয় রেটার্ন করতে পেরেছি
http://127.0.0.1:8787/test?name=lilei
http://127.0.0.1:8787/test?name=hanmeimei
আমরা দুটি অনুরোধের ফলাফল উন্নতিশীল lilei
এবং hanmeimei
প্রত্যাশিত আশা করেছিলাম, তবে ক্রমশঃ hanmeimei
কে ফেরত পাওয়া গেছে, কারণ দ্বিতীয় অনুরোধে স্থিতিশীল ভেরিয়েবল $name
মেটিয়ে দিয়েছে।
সঠিক প্রকারভাবে, প্রক্রিয়া অবস্থা ডেটা সংরক্ষণের জন্য কনটেক্স্ট ব্যবহার করা হয়
<?php
namespace app\controller;
use support\Request;
use support\Context;
use Workerman\Timer;
class TestController
{
public function index(Request $request)
{
Context::set('name', $request->get('name'));
Timer::sleep(5);
return Context::get('name');
}
}
লোকাল ভেরিয়েবল ডাটা প্রলুদ করবার ফলে ডাটা প্রলুদ আপসিকতা নিতেনা
<?php
namespace app\controller;
use support\Request;
use support\Context;
use Workerman\Timer;
class TestController
{
public function index(Request $request)
{
$name = $request->get('name');
Timer::sleep(5);
return $name;
}
}
কারণ name
কে লোকাল ভেরিয়েবল হিসেবে ব্যবহার করা হয়েছে, কোরম ইউনিয়নের মধ্যে অন্য লোকা ল ভেরিয়েবল অ্যাক্সেস করা যায়না, তাই লোকাল ভেরিয়েবল করোম সেফ।
করোম সম্পর্কে
করোম প্রবল নয়, করোম মাধ্যমে গ্লোবাল ভেরিয়েবল/স্থায়ী ভেরিয়েবল প্রলুদ্ধির সমস্যার মেধা করতে হবে এবং কনটেক্স্ট সেট করা লাগবে। আবার করোম পরিবেশে বাগ ডিবাগ করাটি ব্লকিং প্রোগ্রামিং এর নিচের লেবেলে একটু কঠিন হতে পারে।
webman ব্লকিং প্রোগ্রামিং বস্তুত পর্যাপ্ত দ্রুততা দিয়ে ধর্ম পালটা থেকে, techempower.com সালের একাধিক তিন পলিগনেরিয় পরীক্ষার ডেটা দেখা যায়, webman ব্লকিং প্রোগ্রামিং ডেটাবেইস বিজিনিসের জন্য গো এর ওয়েব ফ্রেমওয়ার্ক gin, echo ইত্যাদির পাশে লেভেলের দ্বিগুন দ্রুততা দিয়েছে, এটি ব্যবহারকারী স্তারের ফ্রেমওয়ার্ক laravel থেকে প্রায় 40 গুণ দ্রুততা দিয়েছে।
যখন ডাটাবেইস, রেডিস এমনকি ইন্টারনেটের অংশ হলে, এমনকি একাধিক প্রসেস ব্লকিং প্রোগ্রামিং দ্রুততা বাড়াতে পারে, এর কারণ হল ডাটাবেইস, রেডিস ইত্যাদি অত্যাধুনিক যখন প্রয়োজন দ্রুত, তবে, করোম তৈমুর, রিস্পন্স, ডিস্পোজ এর দ্রুততা তৈমুরের ক্রেতা অমুল্য।
কখন করোম ব্যবহার করবেন
যখন ব্যাবসা জীবনে ধীরে ধীরে প্রবেশ করে, যেমন ব্যবসার জন্য তৃতীয় পক্ষের ইন্টারফেস এক্সেস করা থাকলে, তাহলে workerman/http-client ব্যবহার করে অসম্ভাব্য এপ্লিকেশন সক্ষমতা বাড়াবে।