نسخه:

لاراول اکتان

معرفی

Laravel Octane با استفاده از سرورهای برنامه پرقدرت، از جمله FrankenPHP ، Open Swoole ، Swoole ، و RoadRunner ، عملکرد برنامه شما را افزایش می دهد . Octane یک بار برنامه شما را بوت می کند، آن را در حافظه نگه می دارد و سپس درخواست های آن را با سرعت مافوق صوت تغذیه می کند.

نصب و راه اندازی

Octane ممکن است از طریق مدیریت بسته Composer نصب شود:

composer require laravel/octane

پس از نصب Octane، می توانید octane:install دستور Artisan را اجرا کنید که فایل پیکربندی Octane را در برنامه شما نصب می کند:

php artisan octane:install

پیش نیازهای سرور

Laravel Octane به PHP 8.1+ نیاز دارد .

FrankenPHP

ادغام اکتان FrankenPHP در بتا است و باید در تولید با احتیاط استفاده شود.

FrankenPHP یک سرور برنامه کاربردی PHP است که در Go نوشته شده است و از ویژگی های وب مدرن مانند نکات اولیه و فشرده سازی Zstandard پشتیبانی می کند. هنگامی که Octane را نصب می کنید و FrankenPHP را به عنوان سرور خود انتخاب می کنید، Octane به طور خودکار باینری FrankenPHP را برای شما دانلود و نصب می کند.

FrankenPHP از طریق Laravel Sail

اگر قصد دارید برنامه خود را با استفاده از Laravel Sail توسعه دهید ، باید دستورات زیر را برای نصب Octane و FrankenPHP اجرا کنید:

./vendor/bin/sail up
 
./vendor/bin/sail composer require laravel/octane

در مرحله بعد، باید از octane:install دستور Artisan برای نصب باینری FrankenPHP استفاده کنید:

./vendor/bin/sail artisan octane:install --server=frankenphp

در نهایت یک SUPERVISOR_PHP_COMMAND متغیر محیطی به laravel.test تعریف سرویس در فایل اپلیکیشن خود اضافه کنید docker-compose.yml . این متغیر محیطی حاوی دستوری است که Sail از آن برای ارائه برنامه شما با استفاده از Octane به جای سرور توسعه PHP استفاده می کند:

services:
laravel.test:
environment:
SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=frankenphp --host=0.0.0.0 --admin-port=2019 --port=80"
XDG_CONFIG_HOME: /var/www/html/config
XDG_DATA_HOME: /var/www/html/data

برای فعال کردن HTTPS، HTTP/2، و HTTP/3، به جای آن، این تغییرات را اعمال کنید:

services:
laravel.test:
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
- '443:443'
- '443:443/udp'
environment:
SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --host=localhost --port=443 --admin-port=2019 --https"
XDG_CONFIG_HOME: /var/www/html/config
XDG_DATA_HOME: /var/www/html/data

به طور معمول، شما باید از طریق به برنامه FrankenPHP Sail خود دسترسی داشته باشید https://localhost ، زیرا استفاده از آن https://127.0.0.1 نیاز به پیکربندی اضافی دارد و دلسرد می شود .

FrankenPHP از طریق Docker

استفاده از تصاویر رسمی Docker FrankenPHP می تواند عملکرد بهبود یافته و استفاده از پسوندهای اضافی را ارائه دهد که در نصب استاتیک FrankenPHP گنجانده نشده است. علاوه بر این، تصاویر رسمی Docker از اجرای FrankenPHP بر روی پلتفرم هایی که به صورت بومی پشتیبانی نمی کند، مانند ویندوز، پشتیبانی می کند. تصاویر رسمی Docker FrankenPHP هم برای توسعه محلی و هم برای استفاده تولید مناسب هستند.

می‌توانید از Dockerfile زیر به‌عنوان نقطه شروعی برای کانتینری‌سازی برنامه Laravel خود با فرانکن پی‌اچ‌پی استفاده کنید:

FROM dunglas/frankenphp
 
RUN install-php-extensions \
pcntl
# Add other PHP extensions here...
 
COPY . /app
 
ENTRYPOINT ["php", "artisan", "octane:frankenphp"]

سپس، در طول توسعه، می توانید از فایل Docker Compose زیر برای اجرای برنامه خود استفاده کنید:

# compose.yaml
services:
frankenphp:
build:
context: .
entrypoint: php artisan octane:frankenphp --max-requests=1
ports:
- "8000:8000"
volumes:
- .:/app

برای اطلاعات بیشتر در مورد اجرای FrankenPHP با Docker ، می توانید به اسناد رسمی FrankenPHP مراجعه کنید .

RoadRunner

RoadRunner توسط باینری RoadRunner که با استفاده از Go ساخته شده است، پشتیبانی می‌شود. اولین باری که سرور Octane مبتنی بر RoadRunner را راه‌اندازی می‌کنید، Octane دانلود و نصب باینری RoadRunner را برای شما پیشنهاد می‌کند.

RoadRunner از طریق Laravel Sail

اگر قصد دارید برنامه خود را با استفاده از Laravel Sail توسعه دهید ، باید دستورات زیر را برای نصب Octane و RoadRunner اجرا کنید:

./vendor/bin/sail up
 
./vendor/bin/sail composer require laravel/octane spiral/roadrunner-cli spiral/roadrunner-http

در مرحله بعد، باید یک پوسته Sail راه اندازی کنید و از rr فایل اجرایی برای بازیابی آخرین بیلد مبتنی بر لینوکس از RoadRunner باینری استفاده کنید:

./vendor/bin/sail shell
 
# Within the Sail shell...
./vendor/bin/rr get-binary

سپس، یک SUPERVISOR_PHP_COMMAND متغیر محیطی به laravel.test تعریف سرویس در فایل برنامه خود اضافه کنید docker-compose.yml . این متغیر محیطی حاوی دستوری است که Sail از آن برای ارائه برنامه شما با استفاده از Octane به جای سرور توسعه PHP استفاده می کند:

services:
laravel.test:
environment:
SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=roadrunner --host=0.0.0.0 --rpc-port=6001 --port=80"

در نهایت، مطمئن شوید که rr باینری قابل اجرا است و تصاویر Sail خود را بسازید:

chmod +x ./rr
 
./vendor/bin/sail build --no-cache

سوول

اگر قصد دارید از سرور برنامه Swoole برای ارائه برنامه Laravel Octane خود استفاده کنید، باید پسوند Swoole PHP را نصب کنید. به طور معمول، این را می توان از طریق PECL انجام داد:

pecl install swoole

Swoole را باز کنید

اگر می خواهید از سرور برنامه Open Swoole برای ارائه برنامه Laravel Octane خود استفاده کنید، باید افزونه Open Swoole PHP را نصب کنید. به طور معمول، این را می توان از طریق PECL انجام داد:

pecl install openswoole

استفاده از Laravel Octane با Open Swoole همان عملکرد ارائه شده توسط Swoole مانند وظایف همزمان، تیک ها و فواصل زمانی را به شما می دهد.

Swoole از طریق Laravel Sail

قبل از ارائه یک برنامه Octane از طریق Sail، مطمئن شوید که آخرین نسخه Laravel Sail را دارید و آن را ./vendor/bin/sail build --no-cache در دایرکتوری ریشه برنامه خود اجرا کنید.

از طرف دیگر، می‌توانید برنامه Octane مبتنی بر Swoole خود را با استفاده از Laravel Sail ، محیط توسعه رسمی مبتنی بر Docker برای لاراول، توسعه دهید. Laravel Sail به طور پیش فرض شامل پسوند Swoole است. با این حال، همچنان باید docker-compose.yml فایل استفاده شده توسط Sail را تنظیم کنید.

برای شروع، یک SUPERVISOR_PHP_COMMAND متغیر محیطی به laravel.test تعریف سرویس در فایل برنامه خود اضافه کنید docker-compose.yml . این متغیر محیطی حاوی دستوری است که Sail از آن برای ارائه برنامه شما با استفاده از Octane به جای سرور توسعه PHP استفاده می کند:

services:
laravel.test:
environment:
SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=swoole --host=0.0.0.0 --port=80"

در نهایت، تصاویر بادبان خود را بسازید:

./vendor/bin/sail build --no-cache

پیکربندی Swoole

Swoole از چند گزینه پیکربندی اضافی پشتیبانی می کند که octane در صورت لزوم می توانید آنها را به فایل پیکربندی خود اضافه کنید. از آنجایی که به ندرت نیاز به اصلاح دارند، این گزینه‌ها در فایل تنظیمات پیش‌فرض گنجانده نشده‌اند:

'swoole' => [
'options' => [
'log_file' => storage_path('logs/swoole_http.log'),
'package_max_length' => 10 * 1024 * 1024,
],
],

ارائه برنامه شما

سرور Octane را می توان از طریق octane:start دستور Artisan راه اندازی کرد. به طور پیش فرض، این دستور از سرور مشخص شده توسط server گزینه پیکربندی فایل پیکربندی برنامه شما استفاده می کند octane :

php artisan octane:start

به‌طور پیش‌فرض، Octane سرور را روی پورت 8000 راه‌اندازی می‌کند، بنابراین می‌توانید از طریق مرورگر وب به برنامه خود دسترسی داشته باشید http://localhost:8000 .

ارائه برنامه شما از طریق HTTPS

به‌طور پیش‌فرض، برنامه‌هایی که از طریق Octane اجرا می‌شوند، پیوندهایی با پیشوند ایجاد می‌کنند http:// . متغیر OCTANE_HTTPS محیطی که در فایل پیکربندی برنامه شما استفاده می‌شود ، می‌تواند هنگام ارائه برنامه شما از طریق HTTPS config/octane.php روی آن تنظیم شود . true هنگامی که این مقدار پیکربندی روی تنظیم می شود true ، Octane به لاراول دستور می دهد که تمام پیوندهای تولید شده را با پیشوند https:// :

'https' => env('OCTANE_HTTPS', false),

ارائه برنامه شما از طریق Nginx

اگر برای مدیریت پیکربندی سرور خود کاملاً آماده نیستید یا با پیکربندی همه سرویس های مختلف مورد نیاز برای اجرای یک برنامه قوی Laravel Octane راحت نیستید، Laravel Forge را بررسی کنید .

در محیط های تولیدی، شما باید برنامه Octane خود را در پشت یک وب سرور سنتی مانند Nginx یا Apache ارائه دهید. انجام این کار به وب سرور اجازه می دهد تا به دارایی های ثابت شما مانند تصاویر و شیوه نامه ها سرویس دهد و همچنین خاتمه گواهی SSL شما را مدیریت کند.

در مثال پیکربندی Nginx زیر، Nginx دارایی‌های استاتیک و درخواست‌های پراکسی سایت را به سرور Octane که روی پورت 8000 اجرا می‌شود، ارائه می‌کند:

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
 
server {
listen 80;
listen [::]:80;
server_name domain.com;
server_tokens off;
root /home/forge/domain.com/public;
 
index index.php;
 
charset utf-8;
 
location /index.php {
try_files /not_exists @octane;
}
 
location / {
try_files $uri $uri/ @octane;
}
 
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
 
access_log off;
error_log /var/log/nginx/domain.com-error.log error;
 
error_page 404 /index.php;
 
location @octane {
set $suffix "";
 
if ($uri = /index.php) {
set $suffix ?$query_string;
}
 
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Scheme $scheme;
proxy_set_header SERVER_PORT $server_port;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
 
proxy_pass http://127.0.0.1:8000$suffix;
}
}

تماشای تغییرات فایل

از آنجایی که برنامه شما یک بار در هنگام راه اندازی سرور Octane در حافظه بارگذاری می شود، هر گونه تغییر در فایل های برنامه شما هنگام بازخوانی مرورگر خود منعکس نمی شود. به عنوان مثال، تعاریف مسیر اضافه شده به routes/web.php فایل شما تا زمانی که سرور راه اندازی مجدد نشود، منعکس نمی شود. برای راحتی، می‌توانید از --watch پرچم برای دستور دادن به Octane برای راه‌اندازی خودکار سرور در هر تغییر فایل در برنامه‌تان استفاده کنید:

php artisan octane:start --watch

قبل از استفاده از این ویژگی، باید مطمئن شوید که Node در محیط توسعه محلی شما نصب شده است. علاوه بر این، باید کتابخانه تماشای فایل Chokidar را در پروژه خود نصب کنید:

npm install --save-dev chokidar

می توانید دایرکتوری ها و فایل هایی را که باید تماشا شوند با استفاده از گزینه پیکربندی در فایل پیکربندی watch برنامه خود پیکربندی کنید. config/octane.php

تعیین تعداد کارگران

به‌طور پیش‌فرض، Octane برای هر هسته CPU ارائه‌شده توسط دستگاه شما، یک نرم‌افزار درخواست کاربر راه‌اندازی می‌کند. سپس از این کارگران برای ارائه درخواست‌های HTTP ورودی هنگام ورود به برنامه شما استفاده می‌شود. می توانید به صورت دستی مشخص کنید که چه تعداد کارگر می خواهید --workers هنگام فراخوانی octane:start دستور شروع به استفاده از این گزینه کنید:

php artisan octane:start --workers=4

اگر از سرور برنامه کاربردی Swoole استفاده می‌کنید، می‌توانید تعیین کنید که چه تعداد "کارگر" را می‌خواهید شروع کنید:

php artisan octane:start --workers=4 --task-workers=6

تعیین حداکثر تعداد درخواست

برای کمک به جلوگیری از نشت حافظه سرگردان، Octane به آرامی هر کارگری را پس از رسیدگی به 500 درخواست مجدداً راه اندازی می کند. برای تنظیم این عدد می توانید از --max-requests گزینه زیر استفاده کنید:

php artisan octane:start --max-requests=250

بارگیری مجدد کارگران

با استفاده از دستور، می‌توانید به‌خوبی کارگزاران برنامه سرور Octane را مجدداً راه‌اندازی کنید octane:reload . به طور معمول، این کار باید پس از استقرار انجام شود تا کد جدید مستقر شده شما در حافظه بارگذاری شود و برای ارائه به درخواست‌های بعدی استفاده شود:

php artisan octane:reload

توقف سرور

می توانید سرور Octane را با استفاده از octane:stop دستور Artisan متوقف کنید:

php artisan octane:stop

بررسی وضعیت سرور

می توانید وضعیت فعلی سرور Octane را با استفاده از octane:status دستور Artisan بررسی کنید:

php artisan octane:status

تزریق وابستگی و اکتان

از آنجایی که Octane یک بار برنامه شما را بوت می‌کند و در حین ارائه درخواست‌ها آن را در حافظه نگه می‌دارد، چند نکته وجود دارد که باید هنگام ساخت برنامه خود در نظر بگیرید. به عنوان مثال، register و boot متدهای ارائه دهندگان خدمات برنامه شما تنها یک بار در زمانی که درخواست کارگر در ابتدا بوت می شود، اجرا می شود. در درخواست‌های بعدی، از همان نمونه برنامه دوباره استفاده می‌شود.

با توجه به این موضوع، هنگام تزریق کانتینر سرویس برنامه یا درخواست به سازنده هر شی، باید مراقب باشید. با انجام این کار، آن شی ممکن است یک نسخه قدیمی از کانتینر یا درخواست در درخواست های بعدی داشته باشد.

Octane به طور خودکار تنظیم مجدد هر حالت فریمورک شخص اول بین درخواست ها را انجام می دهد. با این حال، Octane همیشه نمی داند که چگونه حالت جهانی ایجاد شده توسط برنامه شما را بازنشانی کند. بنابراین، باید بدانید که چگونه برنامه خود را به گونه ای بسازید که اکتان پسند باشد. در زیر، ما در مورد رایج ترین موقعیت هایی که ممکن است در هنگام استفاده از اکتان مشکل ایجاد کنند، صحبت خواهیم کرد.

تزریق ظرف

به طور کلی، شما باید از تزریق کانتینر سرویس برنامه یا نمونه درخواست HTTP به سازنده اشیاء دیگر خودداری کنید. به عنوان مثال، اتصال زیر کل کانتینر سرویس برنامه کاربردی را به یک شی که به صورت تک تون محدود شده است تزریق می کند:

use App\Service;
use Illuminate\Contracts\Foundation\Application;
 
/**
* Register any application services.
*/
public function register(): void
{
$this->app->singleton(Service::class, function (Application $app) {
return new Service($app);
});
}

در این مثال، اگر Service نمونه در طول فرآیند بوت برنامه حل شود، کانتینر به سرویس تزریق می شود و همان ظرف Service در درخواست های بعدی توسط نمونه نگه داشته می شود. این ممکن است برای برنامه خاص شما مشکلی ایجاد نکند. با این حال، می‌تواند منجر به از دست رفتن غیرمنتظره اتصالات ظرف شود که بعداً در چرخه راه‌اندازی یا با درخواست بعدی اضافه شدند.

به عنوان یک راه حل، می توانید ثبت اتصال به صورت تکی را متوقف کنید یا می توانید یک بسته شدن حل کننده کانتینر را به سرویسی تزریق کنید که همیشه نمونه کانتینر فعلی را حل می کند:

use App\Service;
use Illuminate\Container\Container;
use Illuminate\Contracts\Foundation\Application;
 
$this->app->bind(Service::class, function (Application $app) {
return new Service($app);
});
 
$this->app->singleton(Service::class, function () {
return new Service(fn () => Container::getInstance());
});

کمک کننده جهانی app و Container::getInstance() متد همیشه آخرین نسخه کانتینر برنامه را برمی گرداند.

درخواست تزریق

به طور کلی، شما باید از تزریق کانتینر سرویس برنامه یا نمونه درخواست HTTP به سازنده اشیاء دیگر خودداری کنید. به عنوان مثال، اتصال زیر کل نمونه درخواست را به یک شی که به صورت تکی محدود شده است تزریق می کند:

use App\Service;
use Illuminate\Contracts\Foundation\Application;
 
/**
* Register any application services.
*/
public function register(): void
{
$this->app->singleton(Service::class, function (Application $app) {
return new Service($app['request']);
});
}

در این مثال، اگر Service نمونه در طول فرآیند بوت برنامه حل شود، درخواست HTTP به سرویس تزریق می شود و همان درخواست Service در درخواست های بعدی توسط نمونه نگه داشته می شود. بنابراین، تمام هدرها، ورودی ها و داده های رشته پرس و جو و همچنین سایر داده های درخواستی نادرست خواهند بود.

به عنوان یک راه حل، می توانید ثبت اتصال به صورت تکی را متوقف کنید یا می توانید بسته شدن حل کننده درخواست را به سرویسی تزریق کنید که همیشه نمونه درخواست فعلی را حل می کند. یا، توصیه‌شده‌ترین رویکرد صرفاً ارسال اطلاعات درخواستی خاص است که شی شما به یکی از متدهای شی در زمان اجرا نیاز دارد:

use App\Service;
use Illuminate\Contracts\Foundation\Application;
 
$this->app->bind(Service::class, function (Application $app) {
return new Service($app['request']);
});
 
$this->app->singleton(Service::class, function (Application $app) {
return new Service(fn () => $app['request']);
});
 
// Or...
 
$service->method($request->input('name'));

کمک کننده جهانی request همیشه درخواستی را که برنامه در حال حاضر رسیدگی می کند، برمی گرداند و بنابراین استفاده از آن در برنامه شما بی خطر است.

تایپ کردن Illuminate\Http\Request نمونه در روش های کنترلر و بسته شدن مسیر قابل قبول است.

پیکربندی تزریق مخزن

به طور کلی، باید از تزریق نمونه مخزن پیکربندی به سازنده اشیاء دیگر اجتناب کنید. به عنوان مثال، اتصال زیر مخزن پیکربندی را به یک شی که به صورت تکی محدود شده است تزریق می کند:

use App\Service;
use Illuminate\Contracts\Foundation\Application;
 
/**
* Register any application services.
*/
public function register(): void
{
$this->app->singleton(Service::class, function (Application $app) {
return new Service($app->make('config'));
});
}

در این مثال، اگر مقادیر پیکربندی بین درخواست‌ها تغییر کند، آن سرویس به مقادیر جدید دسترسی نخواهد داشت زیرا به نمونه مخزن اصلی بستگی دارد.

به عنوان یک راه حل، می توانید ثبت اتصال را به صورت تکی متوقف کنید، یا می توانید بسته شدن حل کننده مخزن پیکربندی را به کلاس تزریق کنید:

use App\Service;
use Illuminate\Container\Container;
use Illuminate\Contracts\Foundation\Application;
 
$this->app->bind(Service::class, function (Application $app) {
return new Service($app->make('config'));
});
 
$this->app->singleton(Service::class, function () {
return new Service(fn () => Container::getInstance()->make('config'));
});

جهانی config همیشه آخرین نسخه مخزن پیکربندی را برمی گرداند و بنابراین برای استفاده در برنامه شما بی خطر است.

مدیریت نشت حافظه

به یاد داشته باشید، Octane برنامه شما را بین درخواست ها در حافظه نگه می دارد. بنابراین، افزودن داده به آرایه ایستا حفظ شده منجر به نشت حافظه می شود. به عنوان مثال، کنترلر زیر دارای نشت حافظه است زیرا هر درخواست به برنامه همچنان داده ها را به $data آرایه استاتیک اضافه می کند:

use App\Service;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
 
/**
* Handle an incoming request.
*/
public function index(Request $request): array
{
Service::$data[] = Str::random(10);
 
return [
// ...
];
}

هنگام ساخت برنامه خود، باید مراقب باشید تا از ایجاد این نوع نشت حافظه جلوگیری کنید. توصیه می شود در طول توسعه محلی، میزان استفاده از حافظه برنامه خود را کنترل کنید تا مطمئن شوید که نشت حافظه جدیدی را به برنامه خود وارد نمی کنید.

وظایف همزمان

این ویژگی به Swoole نیاز دارد .

هنگام استفاده از Swoole، می توانید عملیات را همزمان از طریق وظایف پس زمینه سبک اجرا کنید. شما می توانید این کار را با استفاده از روش Octane انجام دهید concurrently . شما می توانید این روش را با تخریب آرایه PHP ترکیب کنید تا نتایج هر عملیات را بازیابی کنید:

use App\Models\User;
use App\Models\Server;
use Laravel\Octane\Facades\Octane;
 
[$users, $servers] = Octane::concurrently([
fn () => User::all(),
fn () => Server::all(),
]);

وظایف همزمان پردازش شده توسط Octane از "کارگران وظیفه" Swoole استفاده می کنند و در فرآیندی کاملاً متفاوت از درخواست دریافتی اجرا می شوند. تعداد کارگرانی که برای پردازش کارهای همزمان در دسترس هستند، توسط --task-workers دستورالعمل دستور زیر تعیین می شود octane:start :

php artisan octane:start --workers=4 --task-workers=6

هنگام فراخوانی concurrently روش، به دلیل محدودیت های اعمال شده توسط سیستم وظیفه Swoole، نباید بیش از 1024 کار ارائه دهید.

تیک ها و فواصل

این ویژگی به Swoole نیاز دارد .

هنگام استفاده از Swoole، می توانید عملیات "تیک" را ثبت کنید که در هر تعداد مشخص شده از ثانیه اجرا می شود. می‌توانید از طریق tick روش، تماس‌های «تیک» را ثبت کنید. اولین آرگومان ارائه شده به tick متد باید رشته ای باشد که نشان دهنده نام تیک باشد. آرگومان دوم باید فراخوانی باشد که در بازه زمانی مشخص شده فراخوانی شود.

در این مثال، ما یک بسته را ثبت می کنیم تا هر 10 ثانیه یک بار فراخوانی شود. به طور معمول، متد باید در متد یکی از ارائه دهندگان خدمات برنامه شما tick فراخوانی شود : boot

Octane::tick('simple-ticker', fn () => ray('Ticking...'))
->seconds(10);

با استفاده از این immediate روش، می‌توانید به Octane دستور دهید که بلافاصله پس از راه‌اندازی سرور Octane، بلافاصله تیک را فراخوانی کند و پس از آن هر N ثانیه یک‌بار:

Octane::tick('simple-ticker', fn () => ray('Ticking...'))
->seconds(10)
->immediate();

اکتان کش

این ویژگی به Swoole نیاز دارد .

هنگام استفاده از Swoole، می‌توانید از درایور حافظه پنهان Octane استفاده کنید که سرعت خواندن و نوشتن تا 2 میلیون عملیات در ثانیه را فراهم می‌کند. بنابراین، این درایور کش یک انتخاب عالی برای برنامه هایی است که به سرعت خواندن/نوشتن فوق العاده از لایه کش خود نیاز دارند.

این درایور کش توسط جداول Swoole ارائه می شود . تمام داده های ذخیره شده در حافظه نهان برای همه کارگران روی سرور در دسترس است. با این حال، هنگام راه اندازی مجدد سرور، داده های کش پاک می شوند:

Cache::store('octane')->put('framework', 'Laravel', 30);

حداکثر تعداد ورودی های مجاز در حافظه پنهان Octane ممکن است در octane فایل پیکربندی برنامه شما تعریف شود.

فواصل کش

علاوه بر روش‌های معمولی که توسط سیستم کش لاراول ارائه می‌شود، درایور کش Octane دارای حافظه‌های پنهان مبتنی بر فاصله است. این کش ها به طور خودکار در بازه زمانی مشخص شده به روز می شوند و باید در boot روش یکی از ارائه دهندگان خدمات برنامه شما ثبت شوند. به عنوان مثال، کش زیر هر پنج ثانیه یکبار به روز می شود:

use Illuminate\Support\Str;
 
Cache::store('octane')->interval('random', function () {
return Str::random(10);
}, seconds: 5);

جداول

این ویژگی به Swoole نیاز دارد .

هنگام استفاده از Swoole، می توانید جداول Swoole دلخواه خود را تعریف کرده و با آنها تعامل داشته باشید . جداول Swoole توان عملیاتی فوق‌العاده‌ای را ارائه می‌دهند و داده‌های موجود در این جداول برای همه کارگران روی سرور قابل دسترسی است. با این حال، داده های موجود در آنها با راه اندازی مجدد سرور از بین می رود.

tables جداول باید در آرایه پیکربندی فایل پیکربندی برنامه شما تعریف شوند octane . یک جدول نمونه که حداکثر 1000 ردیف را مجاز می‌کند، قبلاً برای شما پیکربندی شده است. حداکثر اندازه ستون‌های رشته‌ای را می‌توان با تعیین اندازه ستون پس از نوع ستون، همانطور که در زیر مشاهده می‌کنید، پیکربندی کرد:

'tables' => [
'example:1000' => [
'name' => 'string:1000',
'votes' => 'int',
],
],

برای دسترسی به جدول، می توانید از Octane::table روش زیر استفاده کنید:

use Laravel\Octane\Facades\Octane;
 
Octane::table('example')->set('uuid', [
'name' => 'Nuno Maduro',
'votes' => 1000,
]);
 
return Octane::table('example')->get('uuid');

انواع ستون های پشتیبانی شده توسط جداول Swoole عبارتند از: string , int و float .