বর্ণনা
workerman 4.x সংস্করণ থেকে HTTP পরিষেবার সমর্থন শক্তিশালী করা হয়েছে। এটি অনুরোধ ক্লাস, প্রতিক্রিয়া ক্লাস, সেশন ক্লাস এবং SSE এর মাধ্যমে কাজ করে। আপনি যদি workerman এর HTTP পরিষেবা ব্যবহার করতে চান তবে workerman4.x অথবা এর পরবর্তী সংস্করণ ব্যবহার করা সুপারিশ করা হচ্ছে।
দয়া করে নোট করুন যে নিম্নলিখিত সবকিছু workerman4.x সংস্করণের ব্যবহার, workerman3.x এর সাথে অসামঞ্জস্যপূর্ণ।
অনুরোধ বস্তু পাওয়া
অনুরোধ বস্তু সমস্ত onMessage কলব্যাক ফাংশনের মধ্যে পাওয়া যায়, ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে Request অবজেক্টটি কলব্যাক ফাংশনের দ্বিতীয় প্যারামিটার হিসেবে প্রেরণ করবে।
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
// $request হল অনুরোধ বস্তু, এখানে অনুরোধ বস্তুটির উপর কোনো ক্রিয়া চলানো হচ্ছে না, সরাসরি ব্রাউজারকে hello ফেরত দেওয়া হচ্ছে
$connection->send("hello");
};
// ওয়ার্কার চালান
Worker::runAll();
যখন ব্রাউজার http://127.0.0.1:8080 পরিদর্শন করে, এটি hello ফেরত দেবে।
অনুরোধ প্যারামিটার get পাওয়া
পুরো get অ্যারে পাওয়া
$get = $request->get();
যদি অনুরোধে কোন get প্যারামিটার না থাকে, তাহলে এটি একটি খালি অ্যারে ফেরত দেবে।
get অ্যারের কোন একটি মান পাওয়া
$name = $request->get('name');
যদি get অ্যারেতে এই মান না থাকে তাহলে এটি null ফেরত দেবে।
আপনি get পদ্ধতির দ্বিতীয় প্যারামিটার হিসেবে একটি ডিফল্ট মানও দিতে পারেন, যদি get অ্যারেতে সঙ্গতিশীল মান না পাওয়া যায় তাহলে এটি ডিফল্ট মান ফেরত দেবে। উদাহরণস্বরূপ:
$name = $request->get('name', 'tom');
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->get('name'));
};
// ওয়ার্কার চালান
Worker::runAll();
যখন ব্রাউজার http://127.0.0.1:8080?name=jerry&age=12 পরিদর্শন করে, এটি jerry ফেরত দেবে।
অনুরোধ প্যারামিটার post পাওয়া
পুরো post অ্যারে পাওয়া
$post = $request->post();
যদি অনুরোধে কোন post প্যারামিটার না থাকে, তাহলে এটি একটি খালি অ্যারে ফেরত দেবে।
post অ্যারের কোন একটি মান পাওয়া
$name = $request->post('name');
যদি post অ্যারেতে এই মান না থাকে তাহলে এটি null ফেরত দেবে।
get পদ্ধতির মতো, আপনি post পদ্ধতির দ্বিতীয় প্যারামিটার হিসেবে একটি ডিফল্ট মানও দিতে পারেন, যদি post অ্যারেতে সঙ্গতিশীল মান না পাওয়া যায় তাহলে এটি ডিফল্ট মান ফেরত দেবে। উদাহরণস্বরূপ:
$name = $request->post('name', 'tom');
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$post = $request->post();
$connection->send(var_export($post, true));
};
// ওয়ার্কার চালান
Worker::runAll();
মৌলিক অনুরোধ post প্যাকেজটি পাওয়া
$post = $request->rawBody();
এই ফিচারটি php-fpm এর মধ্যে file_get_contents("php://input"); অপারেশনের মতো। এটি HTTP মৌলিক অনুরোধ প্যাকেজটি পাওয়ার জন্য ব্যবহৃত হয়। এটি application/x-www-form-urlencoded ফরম্যাটের বাইরে পোস্ট অনুরোধ ডেটা পাওয়ার সময় খুবই সহায়ক।
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$post = json_decode($request->rawBody());
$connection->send('hello');
};
// ওয়ার্কার চালান
Worker::runAll();
হেডার পাওয়া
পুরো হেডার অ্যারে পাওয়া
$headers = $request->header();
যদি অনুরোধে কোন হেডার প্যারামিটার না থাকে, তাহলে এটি একটি খালি অ্যারে ফেরত দেবে। সকল কী নিম্নরূপ থাকবে।
হেডার অ্যারের কোন একটি মান পাওয়া
$host = $request->header('host');
যদি হেডার অ্যারেতে এই মান না থাকে তাহলে এটি null ফেরত দেবে। সকল কী নিম্নরূপ থাকবে।
get পদ্ধতির মতো, আপনি header পদ্ধতির দ্বিতীয় প্যারামিটার হিসেবে একটি ডিফল্ট মানও দিতে পারেন, যদি হেডার অ্যারেতে সঙ্গতিশীল মান না পাওয়া যায় তাহলে এটি ডিফল্ট মান ফেরত দেবে। উদাহরণস্বরূপ:
$host = $request->header('host', 'localhost');
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
if ($request->header('connection') === 'keep-alive') {
$connection->send('hello');
} else {
$connection->close('hello');
}
};
// ওয়ার্কার চালান
Worker::runAll();
কুকি পাওয়া
পুরো কুকি অ্যারে পাওয়া
$cookies = $request->cookie();
যদি অনুরোধে কোন কুকি প্যারামিটার না থাকে, তাহলে এটি একটি খালি অ্যারে ফেরত দেবে।
কুকি অ্যারের কোন একটি মান পাওয়া
$name = $request->cookie('name');
যদি কুকি অ্যারেতে এই মান না থাকে তাহলে এটি null ফেরত দেবে।
get পদ্ধতির মতো, আপনি cookie পদ্ধতির দ্বিতীয় প্যারামিটার হিসেবে একটি ডিফল্ট মানও দিতে পারেন, যদি কুকি অ্যারেতে সঙ্গতিশীল মান না পাওয়া যায় তাহলে এটি ডিফল্ট মান ফেরত দেবে। উদাহরণস্বরূপ:
$name = $request->cookie('name', 'tom');
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$cookie = $request->cookie();
$connection->send(var_export($cookie, true));
};
// ওয়ার্কার চালান
Worker::runAll();
আপলোড করা ফাইল পাওয়া
পুরো আপলোড করা ফাইল অ্যারে পাওয়া
$files = $request->file();
ফাইলের ফিরতি ফরম্যাটটি নিম্নরূপ:
array (
'avatar' => array (
'name' => '123.jpg',
'tmp_name' => '/tmp/workerman.upload.9hjR4w',
'size' => 1196127,
'error' => 0,
'type' => 'application/octet-stream',
),
'anotherfile' => array (
'name' => '456.txt',
'tmp_name' => '/tmp/workerman.upload.9sirSws',
'size' => 490,
'error' => 0,
'type' => 'text/plain',
)
)
যেখানে:
- name ফাইলের নাম
- tmp_name ডিস্কের অস্থায়ী ফাইলের অবস্থান
- size ফাইলের আকার
- error হল ত্রুটি কোড
- type ফাইলের mine ধরনের।
দয়া করে নোট করুন:
-
আপলোড করা ফাইলের আকার defaultMaxPackageSize দ্বারা সীমাবদ্ধ, ডিফল্ট 10M, এটি পরিবর্তন করা যেতে পারে।
-
অনুরোধ শেষ হওয়ার পরে ফাইল স্বয়ংক্রিয়ভাবে মুছে ফেলা হবে।
-
যদি অনুরোধে কোনও আপলোড করা ফাইল না থাকে, তাহলে এটি একটি খালি অ্যারে ফেরত দেবে।
নির্দিষ্ট আপলোড হওয়া ফাইল পাওয়া
$avatar_file = $request->file('avatar');
ফিরে আসবে এমন একটি নোট:
array (
'name' => '123.jpg',
'tmp_name' => '/tmp/workerman.upload.9hjR4w',
'size' => 1196127,
'error' => 0,
'type' => 'application/octet-stream',
)
যদি আপলোড করা ফাইল না থাকে তাহলে এটি null ফেরত দেবে।
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$file = $request->file('avatar');
if ($file && $file['error'] === UPLOAD_ERR_OK) {
rename($file['tmp_name'], '/home/www/web/public/123.jpg');
$connection->send('ok');
return;
}
$connection->send('upload fail');
};
// ওয়ার্কার চালান
Worker::runAll();
হোস্ট পাওয়া
অনুরোধের হোস্ট তথ্য পাওয়া।
$host = $request->host();
যদি অনুরোধ ঠিকানা অমান্যক 80 বা 443 পোর্ট হয়, তাহলে হোস্ট তথ্য পোর্টের সাথে হতে পারে, যেমন example.com:8080। যদি পোর্ট না চাওয়া হয়, তাহলে প্রথম প্যারামিটার true পাঠানো যেতে পারে।
$host = $request->host(true);
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->host());
};
// ওয়ার্কার চালান
Worker::runAll();
যখন ব্রাউজার http://127.0.0.1:8080?name=tom পরিদর্শন করে, এটি 127.0.0.1:8080 ফেরত দেবে।
অনুরোধ পদ্ধতি পাওয়া
$method = $request->method();
ফিরত আসে GET、POST、PUT、DELETE、OPTIONS、HEAD এর মধ্যে একটি।
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->method());
};
// ওয়ার্কার চালান
Worker::runAll();
অনুরোধ uri পাওয়া
$uri = $request->uri();
ফিরত আসে অনুরোধের uri, যার মধ্যে path এবং queryString অংশ অন্তর্ভুক্ত।
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->uri());
};
// ওয়ার্কার চালান
Worker::runAll();
যখন ব্রাউজার http://127.0.0.1:8080/user/get.php?uid=10&type=2 পরিদর্শন করে, এটি user/get.php?uid=10&type=2 ফেরত দেবে।
অনুরোধ পথ পাওয়া
$path = $request->path();
ফিরত আসে অনুরোধের path অংশ।
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->path());
};
// ওয়ার্কার চালান
Worker::runAll();
যখন ব্রাউজার http://127.0.0.1:8080/user/get.php?uid=10&type=2 পরিদর্শন করে, এটি /user/get.php ফেরত দেবে।
অনুরোধ queryString পাওয়া
$query_string = $request->queryString();
ফিরত আসে অনুরোধের queryString অংশ।
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->queryString());
};
// ওয়ার্কার চালান
Worker::runAll();
যখন ব্রাউজার http://127.0.0.1:8080/user/get.php?uid=10&type=2 পরিদর্শন করে, এটি uid=10&type=2 ফেরত দেবে।
অনুরোধ HTTP সংস্করণ পাওয়া
$version = $request->protocolVersion();
ফিরত আসে স্ট্রিং 1.1 অথবা 1.0।
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->protocolVersion());
};
// ওয়ার্কার চালান
Worker::runAll();
অনুরোধ sessionId পাওয়া
$sid = $request->sessionId();
ফিরত আসে একটি স্ট্রিং, যা অক্ষর এবং সংখ্যা নিয়ে গঠিত
উদাহরণ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->sessionId());
};
// ওয়ার্কার চালান
Worker::runAll();