1.5 अपग्रेड गाइड
अपग्रेड से पहले बैकअप बनाएं, निम्नलिखित कमांड को चलाकर अपग्रेड करें
composer require workerman/webman-framework ^1.5 -W && composer require webman/console ^1.2.12 && php webman install
फ़ीचर्स और बदलाव
workerman v5 कोरोटीनsupport
सूचना
workerman v5 के लिए PHP>=8.1 की आवश्यकता है
workerman अपग्रेड कमांडcomposer require workerman/workerman ^5.0.0 -W
फाइबर कोरोटीन के लिए इंस्टॉल करने के लिए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()
प्रक्रिया को ब्लॉक नहीं करेगा।
HTTP अनुरोध भेजें
ध्यान दें
इंस्टॉल करने के लिए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 में ब्लॉक रहित HTTP रिक्वेस्ट को संभाल सकते हैं जो की प्रदर्शन बढ़ाता है।
अधिक जानकारी के लिए workerman/http-client देखे।
सपोर्ट/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;
}
}
[सत्य लेकिन यह स्थान उपाय कोरोटीन अभियान है]
<?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
स्थानीय वेरिएबल है, इसलिए यह कोरोटीन-सुरक्षित है क्योंकि कोरोटीन के बीच संबंधित नहीं है।
कोरोटीन के बारे में
कोरोटीन कोई जादूई गोली नहीं है, कोरोटीन को लाने का मतलब है कि ग्लोबल वेरिएबल/स्थिर वेरिएबल प्रदूषण समस्या पर ध्यान देना है, और context सेट करना है। साथ ही कोरोटीन वातावरण में बग का डीबग करना ब्लॉक संरचना की तुलना में कठिन है।
वेबमैन ब्लॉकिंग संरचना वास्तव में पर्याप्त तेज है, techempower.com तीन साल के तीन दौर के बेंचमार्क डेटा के अनुसार, वेबमैन ब्लॉकिंग संरचना डेटाबेस व्यवसाय के लिए go के वेब फ्रेमवर्क जैसे gin, echo से लगभग दोगुनी प्रदर्शन प्रदान करता है, और पारंपरिक फ्रेमवर्क laravel की तुलना में लगभग 40 गुना ज्यादा प्रदर्शन प्रदान करता है।
जब डेटाबेस, रेडिस सभी इनटरनेट में होते हैं, तो बहुप्रक्रियाशील ब्लॉकिंग संरचना के प्रदर्शन की संभावना होती है, क्योंकि डेटाबेस, रेडिस आदि पर्याप्त तेज़ हैं, कोरोटीन का निर्माण, अनुसूचि, मिटाने की लागत शायद प्रक्रिया परिवर्तन की लागत से अधिक हो सकती है, इसलिए इस समय कोरोटीन इस संरचना की प्रदर्शन को व्यापक रूप से नहीं बढ़ाती है।
कब कोरोटीन का उपयोग करें
जब व्यवसाय में धीमे पहुँच होती है, उदाहरण के लिए व्यवसाय को तिसरे पक्ष एपीआई से संपर्क करने की आवश्यकता होती है, तो कोरोटीन तरीके से असिंक्रोनस एचटीटीपी करने के लिए workerman/http-client का उपयोग किया जा सकता है, जिससे अनुप्रयोग की समयसीमा शक्ति बढ़ी जा सकती है।