Asenkron İşlemler
Uzun süren komutları arka planda başlatın ve sonucu jQuery gerektirmeden izleyin.
Async, bir KUT konsol komutunu ayrı PHP sürecinde başlatır ve işlem sonucunun tarayıcıdan izlenmesini sağlar. Üretilen istemci kodu yerel fetch(), FormData ve zamanlayıcı API’lerini kullanır; jQuery gerektirmez.
Dinleme adresini belirleme
public function main()
{
Async::setSocketURI('Jobs/socket');
}
public function socket() : void
{
Async::socket();
}
Async::socket() JSON yanıtı üretir ve isteği sonlandırır. Bu yöntemin arkasına başka çıktı yazmayın.
İşi başlatma
$processId = Async::run('command:run Report:build',
[
'reportId' => 42
]);
$this->processId = $processId;
Async, Services.processor.path altında tanımlanan CLI PHP yolunu değiştirmeden kullanır. KUT sunucu panelini veya PHP kurulum dizinini tahmin etmez. Ayar yalnızca gerçek CLI çalışmasında boşsa PHP_BINARY kullanılabilir; web/FPM isteğinde boş bırakılırsa açıklayıcı bir yapılandırma hatası üretilir.
Config::set('Services', 'processor', [
'driver' => 'exec',
'path' => PHP_BINDIR.'/php'
]);
Komut tarafı
public function build(string $processId) : void
{
Async::process($processId, function(array $data)
{
$file = ReportService::build($data['reportId']);
Async::output(['file' => $file]);
}, true);
}
Sonucu görünümde izleme
<script>
@Async::success
({[
const status = document.getElementById('report-status');
if(data.status === 'processing')
{
status.textContent = 'Rapor hazırlanıyor…';
}
else if(data.file)
{
status.textContent = 'Rapor hazır.';
}
]})::error
({[
document.getElementById('report-status').textContent =
'İşlem durumu alınamadı.';
]})::listen($this->processId, 1000)
</script>
Dinleyici aynı anda yalnızca bir istek gönderir. Sunucu processing dışında bir sonuç verdiğinde zamanlayıcı durur. HTTP hataları error callback’ine iletilir.
İşlem kayıtlarını yönetme
$processes = Async::list(); // Her kayıtta procKey bulunur.
Async::close($processes[0]['procKey']);
$error = Async::getError($processId); // Okunan hata kaydını tüketir.
// Yalnız KUT Async yan dosyalarını temizler; normal proje dosyalarına dokunmaz.
$removedCount = Async::clear(60);
close(), çalışan bir PID varsa süreci durdurur; PID henüz oluşmadıysa da bayat işlem kaydını kaldırır. clear() için verilen sayı, dakikadan daha eski error, output, stdout, stderr ve report yan dosyalarını hedefler. Sıfır bütün uygun yan dosyaları temizler.