धीमी व्यवसाय प्रोसेसिंग
कभी-कभी हमें धीमी व्यवसाय प्रोसेसिंग की आवश्यकता होती है, ताकि धीमी व्यवसाय प्रोसेसिंग Webman की अन्य अनुरोध प्रोसेसिंग को प्रभावित न करे, इन व्यवसायों के लिए विभिन्न प्रोसेसिंग योजनाएँ उपयोग की जा सकती हैं।
योजना 1 संदेश कतार का उपयोग करें
संदर्भ redis कतार stomp कतार
लाभ
यह अचानक बड़ी संख्या में व्यवसाय प्रोसेसिंग अनुरोधों का सामना कर सकता है।
हानि
क्लाइंट को सीधे परिणाम वापस नहीं कर सकता। यदि परिणाम को पुश करने की आवश्यकता है, तो अन्य सेवाओं के संयोजन जैसे कि webman/push का उपयोग करना होगा।
योजना 2 नया HTTP पोर्ट जोड़ें
धीमे अनुरोधों को प्रोसेस करने के लिए एक नया HTTP पोर्ट जोड़ें, ये धीमे अनुरोध इस पोर्ट को एक्सेस करके एक विशेष समूह की प्रक्रियाओं में प्रवेश करते हैं, प्रोसेस करने के बाद परिणाम को सीधे क्लाइंट को वापस करते हैं।
लाभ
क्लाइंट को डेटा सीधे वापस किया जा सकता है।
हानि
अचानक बड़ी संख्या में अनुरोधों का सामना नहीं कर सकता।
कार्यान्वयन चरण
config/process.php
में निम्नलिखित कॉन्फ़िगरेशन जोड़ें।
return [
// ... यहाँ अन्य कॉन्फ़िगरेशन को छोड़ा गया है ...
'task' => [
'handler' => \Webman\App::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() // सार्वजनिक डायरेक्टरी स्थान
]
]
];
इस प्रकार, धीमे इंटरफेस को http://127.0.0.1:8686/
इस समूह की प्रक्रियाओं के माध्यम से चलाया जा सकता है, जिससे अन्य प्रक्रियाओं के व्यवसाय प्रोसेसिंग पर कोई प्रभाव नहीं पड़ेगा।
फ्रंट-एंड को पोर्ट का भेद बताने के लिए, nginx में 8686 पोर्ट के लिए एक प्रॉक्सी जोड़ सकते हैं। मान लीजिए कि धीमे इंटरफेस के अनुरोध पथ सभी /tast
से शुरू होते हैं,整个nginx配置类似如下:
upstream webman {
server 127.0.0.1:8787;
keepalive 10240;
}
# नया 8686 अपस्ट्रीम जोड़ें
upstream task {
server 127.0.0.1:8686;
keepalive 10240;
}
server {
server_name webman.com;
listen 80;
access_log off;
root /path/webman/public;
# /tast से शुरू होने वाले अनुरोध 8686 पोर्ट पर जाएँ, कृपया वास्तविक स्थिति के अनुसार /tast को आवश्यक प्रीफिक्स में बदलें
location /tast {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://task;
}
# अन्य अनुरोध मूल 8787 पोर्ट पर जाएँ
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Connection "";
if (!-f $request_filename){
proxy_pass http://webman;
}
}
}
इस प्रकार, जब क्लाइंट domain.com/tast/xxx
पर जाते हैं, तो वे अलग 8686 पोर्ट पर प्रोसेसिंग करेंगे, जिससे 8787 पोर्ट के अनुरोध प्रोसेसिंग पर कोई प्रभाव नहीं पड़ेगा।
योजना 3 HTTP Chunked का उपयोग करना असंक्रामक रूप से डेटा भेजें
लाभ
क्लाइंट को डेटा सीधे वापस किया जा सकता है।
workerman/http-client स्थापित करें
composer require workerman/http-client
app/controller/IndexController.php
<?php
namespace app\controller;
use support\Request;
use support\Response;
use Workerman\Protocols\Http\Chunk;
class IndexController
{
public function index(Request $request)
{
$connection = $request->connection;
$http = new \Workerman\Http\Client();
$http->get('https://example.com/', function ($response) use ($connection) {
$connection->send(new Chunk($response->getBody()));
$connection->send(new Chunk('')); // समाप्ति का प्रतिनिधित्व करने के लिए खाली chunk भेजें
});
// पहले एक http हेडर भेजें, बाद में डेटा असंक्रामक रूप से भेजें
return response()->withHeaders([
"Transfer-Encoding" => "chunked",
]);
}
}
सूचना
इस उदाहरण में,workerman/http-client
क्लाइंट का उपयोग करके असंक्रामक HTTP परिणाम प्राप्त कर रहा है और डेटा वापस कर रहा है, अन्य असंक्रामक क्लाइंट जैसे AsyncTcpConnection का भी उपयोग किया जा सकता है।