İşletme Başlatma

Bazen bir süreç başlatıldıktan sonra bazı işletme başlatma işlemleri yapmamız gerekir. Bu başlatma işlemi, süreç yaşam döngüsünde yalnızca bir kez gerçekleştirilir; örneğin, süreç başlatıldıktan sonra bir zamanlayıcı ayarlamak veya veritabanı bağlantısını başlatmak gibi. Aşağıda bunu açıklayacağız.

Prensip

İşlem Akışı bölümünde açıklandığına göre, webman süreç başlatıldıktan sonra config/bootstrap.php (dahil config/plugin/*/*/bootstrap.php) dosyasında ayarlanan sınıfları yükleyecek ve bu sınıfların start metodunu çağıracaktır. Start metodunda işletme kodumuzu ekleyerek, süreç başlatıldıktan sonra işletme başlatma işlemini tamamlayabiliriz.

Süreç

Diyelim ki, mevcut sürecin bellek kullanımını düzenli olarak raporlayacak bir zamanlayıcı oluşturmak istiyoruz, bu sınıfa MemReport adını vereceğiz.

Komut Çalıştırma

Komut php webman make:bootstrap MemReport yazarak başlatma dosyası app/bootstrap/MemReport.php oluşturun.

İpucu
Eğer webman'ınızda webman/console yüklü değilse, komut composer require webman/console yazarak yükleyin.

Başlatma Dosyasını Düzenleme

app/bootstrap/MemReport.php dosyasını düzenleyin, içeriği aşağıda gibidir:

<?php

namespace app\bootstrap;

use Webman\Bootstrap;

class MemReport implements Bootstrap
{
    public static function start($worker)
    {
        // Komut satırı ortamı mı ?
        $is_console = !$worker;
        if ($is_console) {
            // Eğer komut satırı ortamında bu başlatmayı yapmak istemiyorsanız, burada doğrudan dönüş yapın
            return;
        }

        // Her 10 saniyede bir çalışacak
        \Workerman\Timer::add(10, function () {
            // Gösterim kolaylığı için, burada raporlama sürecini çıktı ile değiştirdik
            echo memory_get_usage() . "\n";
        });

    }

}

İpucu
Komut satırında kullanıldığında, framework de config/bootstrap.php ayarındaki start metodunu çalıştıracak, $worker değerinin null olup olmadığını kontrol ederek komut satırı ortamında olup olmadığımızı belirleyebiliriz, böylece işletme başlatma kodunu çalıştırıp çalıştırmayacağımıza karar verebiliriz.

Süreç Başlatıldığında Yapılandırma

config/bootstrap.php dosyasını açarak MemReport sınıfını başlangıç öğelerine ekleyin.

return [
    // ...diğer yapılandırmalar burada atlandı...

    app\bootstrap\MemReport::class,
];

Bu şekilde bir işletme başlatma sürecini tamamlamış oluyoruz.

Ek Açıklama

Özelleştirilmiş süreçler başlatıldıktan sonra da config/bootstrap.php ayarındaki start metodu çalıştırılacak, mevcut sürecin ne olduğunu belirlemek için $worker->name kullanılarak $worker->id ile hangi süreç olduğunu kontrol edebiliriz, ardından işletme başlatma kodunuzu hangi süreçte çalıştıracağımıza karar verebiliriz; örneğin, yalnızca webman’ın 0. sürecinde çalıştırmak istiyorsak, MemReport.php içeriği aşağıdaki gibi olacaktır:

<?php

namespace app\bootstrap;

use Webman\Bootstrap;

class MemReport implements Bootstrap
{
    public static function start($worker)
    {
        // Komut satırı ortamı mı ?
        $is_console = !$worker;
        if ($is_console) {
            // Eğer komut satırı ortamında bu başlatmayı yapmak istemiyorsanız, burada doğrudan dönüş yapın
            return;
        }

        // Yalnızca webman'ın 0. sürecinde çalıştır
        if ($worker->name != 'webman' && $worker->id != 0) {
            return;
        }

        // Her 10 saniyede bir çalışacak
        \Workerman\Timer::add(10, function () {
            // Gösterim kolaylığı için, burada raporlama sürecini çıktı ile değiştirdik
            echo memory_get_usage() . "\n";
        });

    }

}