Khởi tạo kinh doanh
Đôi khi chúng ta cần thực hiện một số bước khởi tạo kinh doanh sau khi tiến trình khởi động, bước khởi tạo này chỉ được thực hiện một lần trong vòng đời của tiến trình, chẳng hạn như thiết lập một bộ định thời sau khi tiến trình khởi động, hoặc khởi tạo kết nối cơ sở dữ liệu, v.v. Dưới đây chúng tôi sẽ giải thích về điều này.
Nguyên lý
Theo mô tả trong quy trình thực thi, webman sẽ tải các lớp được thiết lập trong config/bootstrap.php
(bao gồm config/plugin/*/*/bootstrap.php
) và thực thi phương thức start của lớp sau khi tiến trình khởi động. Chúng ta có thể thêm mã kinh doanh vào phương thức start để hoàn thành các hoạt động khởi tạo kinh doanh sau khi tiến trình khởi động.
Quy trình
Giả sử chúng ta muốn tạo một bộ định thời, dùng để định kỳ báo cáo mức sử dụng bộ nhớ hiện tại của tiến trình, lớp này có tên là MemReport
.
Thực thi lệnh
Thực thi lệnh php webman make:bootstrap MemReport
để tạo tệp khởi tạo app/bootstrap/MemReport.php
Lưu ý
Nếu webman của bạn chưa cài đặtwebman/console
, hãy thực hiện lệnhcomposer require webman/console
để cài đặt.
Chỉnh sửa tệp khởi tạo
Chỉnh sửa app/bootstrap/MemReport.php
, nội dung tương tự như sau:
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
class MemReport implements Bootstrap
{
public static function start($worker)
{
// Có phải môi trường dòng lệnh không ?
$is_console = !$worker;
if ($is_console) {
// Nếu bạn không muốn môi trường dòng lệnh thực hiện khởi tạo này, hãy trả về ở đây
return;
}
// Thực hiện mỗi 10 giây một lần
\Workerman\Timer::add(10, function () {
// Để dễ dàng trình bày, chúng tôi sử dụng đầu ra thay cho quá trình báo cáo
echo memory_get_usage() . "\n";
});
}
}
Lưu ý
Khi sử dụng dòng lệnh, khung cũng sẽ thực hiện phương thức start được cấu hình trongconfig/bootstrap.php
, chúng ta có thể thông qua việc kiểm tra$worker
có phải là null hay không để xác định liệu đó có phải là môi trường dòng lệnh hay không, từ đó quyết định xem có thực hiện mã khởi tạo kinh doanh hay không.
Cấu hình khi khởi động tiến trình
Mở config/bootstrap.php
và thêm lớp MemReport
vào các hạng mục khởi động.
return [
// ...bỏ qua các cấu hình khác ở đây...
app\bootstrap\MemReport::class,
];
Như vậy, chúng ta đã hoàn thành quy trình khởi tạo kinh doanh.
Giải thích bổ sung
Phương thức start được cấu hình trong config/bootstrap.php
cũng sẽ được thực hiện sau khi tiến trình tùy chỉnh khởi động, chúng ta có thể sử dụng $worker->name
để xác định tiến trình hiện tại là loại nào, và tiếp theo có thể sử dụng $worker->id
để xác định tiến trình nào, từ đó quyết định xem có thực hiện mã khởi tạo kinh doanh của bạn trong tiến trình đó hay không, chẳng hạn như chúng ta chỉ cần thực hiện trong tiến trình 0 của webman, thì nội dung của MemReport.php
sẽ như sau:
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
class MemReport implements Bootstrap
{
public static function start($worker)
{
// Có phải môi trường dòng lệnh không ?
$is_console = !$worker;
if ($is_console) {
// Nếu bạn không muốn môi trường dòng lệnh thực hiện khởi tạo này, hãy trả về ở đây
return;
}
// Chỉ thực hiện trong tiến trình 0 của webman
if ($worker->name != 'webman' && $worker->id != 0) {
return;
}
// Thực hiện mỗi 10 giây một lần
\Workerman\Timer::add(10, function () {
// Để dễ dàng trình bày, chúng tôi sử dụng đầu ra thay cho quá trình báo cáo
echo memory_get_usage() . "\n";
});
}
}