Kelas PHP EvTimer – Penggunaan dan Contoh

0
(0)

oleh Vincy. Terakhir diubah pada 8 Agustus 2021.

EvTimer adalah kelas pengamat yang membuat instance untuk menjalankan loop peristiwa. Ini menetapkan waktu dan interval untuk menjalankan iterasi loop acara. Waktu adalah spesifikasi wajib. Tapi intervalnya tidak. Ini adalah pengaturan opsional yang hanya berlaku untuk loop peristiwa yang memiliki lebih dari satu iterasi.

Artikel ini menjelaskan item berikut.

  1. Dasar-dasar EvTimer.
  2. Instalasi dan konfigurasi
  3. Penggunaan utilitas ini dalam aplikasi PHP.
  4. Contoh kecil dengan properti dan metode kelas pengamat EvTimer.

Gambaran

EvTimer memicu acara setelah waktu tertentu. Kemudian, ia mengulangi hal yang sama dalam interval periodik. Panggilan acara berulang dalam interval yang ditetapkan adalah tindakan opsional.

Kita dapat mengatur prioritas yang mengatur penanganan beberapa timer. Timer dengan waktu habis lebih awal akan dipanggil di antara yang lain yang memiliki prioritas yang sama.

Timer menghindari penyimpangan pada peristiwa penembakan dalam satu lingkaran dengan interval yang dikonfigurasi. Ini menjanjikan iterasi loop acara yang halus dan akurat.

Loop Acara EvTimer

Instalasi dan Konfigurasi

Itu tidak datang dengan bundel inti PHP. Ini membutuhkan ekstensi PECL Ev untuk menggunakan kelas.

Setelah menginstal ekstensi ini, aktifkan ekstensi ini di file konfigurasi PHP.ini.


extension="ev.so"

Konfirmasikan instalasi dan atur dengan menggemakan tabel phpinfo().

Tentang kelas PHP EvTimer

Halaman dokumentasi PHP menyediakan sinopsis kelas dari kelas EvTimer. Ini termasuk properti untuk mengatur jumlah kejadian berulang, waktu yang tersisa.

Ini memperluas PHP EVWatcher dan menggunakan properti dan metode sendiri dan yang diwarisi.


class EvTimer extends EvWatcher {
/* EVTimer Properties */
public $repeat;
public $remaining;
/* Inherited properties from EvWatcher */
public $is_active;
public $data;
public $is_pending;
public $priority;
/* EvTimer Methods */
public again(): void
public __construct(
     float $after ,
     float $repeat ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0 
)
final public static createStopped(
     float $after ,
     float $repeat ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0 
): EvTimer
public set( float $after , float $repeat ): void
/* Inherited methods from EvWatcher */
public EvWatcher::clear(): int
abstract public EvWatcher::__construct()
public EvWatcher::feed( int $revents ): void
public EvWatcher::getLoop(): EvLoop
public EvWatcher::invoke( int $revents ): void
public EvWatcher::keepalive( bool $value = ?): bool
public EvWatcher::setCallback( callable $callback ): void
public EvWatcher::start(): void
public EvWatcher::stop(): void
}

Properti

mengulang

Ini untuk menahan jumlah detik di mana EvTimer akan berulang untuk memicu acara. Jika 0, maka timer tidak akan memulai kembali setelah waktu habis.

tersisa

Ini mengembalikan waktu yang tersisa untuk mencapai batas waktu atau untuk memecat peristiwa. Untuk timer aktif, ini akan mengembalikan waktu loop acara yang tersisa untuk mencapai batas waktu.

Metode

EvTimer::lagi()

Ini me-restart pengamat EvTimer sekali dalam setiap mengulang detik seperti yang dikonfigurasi. Jika penghitung waktu tidak berulang dengan mengulang detik 0, maka metode ini tidak akan dipanggil setelah batas waktu.

EvTimer::__construct()

Ini membuat instance pengamat EvTimer. Ini adalah konstruktor empat argumen. Keempat argumen tersebut adalah,

  • $setelah – menahan detik setelah penghitung waktu akan memicu acara.
  • $ulangi – menahan detik yang menentukan interval antara dua loop peristiwa dari pengatur waktu.
  • $panggilan balik – Ini mendefinisikan fungsi panggilan balik EvWatcher yang akan dipanggil untuk pengamat aktif.
  • $data – data milik EvWatcher.
  • $prioritas – Nilai integer mendefinisikan prioritas pengamat EvTimer.

EvTimer::createStopped()

Ini membuat instance pengamat EvTimer dalam keadaan berhenti. Itu tidak akan memulai pengamat sampai menelepon secara manual. Ini mengembalikan instance pada pembuatan yang berhasil.

EvTimer::set()

Ini mengonfigurasi pengamat EvTimer dengan $setelah dan $ulangi detik.

Bagaimana EvTimer digunakan dalam aplikasi PHP

EvTimer dapat digunakan dalam banyak cara dalam aplikasi PHP. Beberapa dari kegunaan tersebut tercantum di bawah ini.

  • Untuk menjalankan hitungan mundur sisi Server dalam sistem manajemen acara.
  • Pengiriman pesan otomatis dalam interval periodik.
  • Pantau dan catat peristiwa soket.
  • Untuk menjalankan pekerjaan cron dengan terbatas mengulangi.

Contoh PHP EvTimer

Contoh ini menggunakan properti dan metode kelas EvTimer sendiri dan yang diwarisi.

Watcher 1 adalah instance timer yang tidak berulang sedangkan watcher 2 tidak. Watcher 2 dibuat dengan mengatur $after = 5 dan $repeat = 2. Ini memanggil acara setelah 5 detik dan mengulangi hal yang sama untuk setiap 2 detik.

Ini mencetak jumlah iterasi saat ini pada setiap iterasi. Ini menghentikan timer setelah melewati 5 iterasi. Panggilan balik memungkinkan 2 iterasi lebih lanjut dengan memulai ulang penghitung waktu menggunakan lagi().

Ini menciptakan instance pengamat yang berhenti. Seperti yang telah kita lihat, awalnya tidak aktif sampai kita memanggil start() di atasnya.


<?php
// Create watcher instance of the non-repeating timer to trigger after 5 seconds
$watcher1 = new EvTimer(5, 0, function () {
    echo "5 seconds crossed n";
});

// Create watcher instance of the timer firing after 5 seconds
// repeats every 2 seconds
$watcher2 = new EvTimer(5, 2, function ($watcher) {
    echo "n iteration " . Ev::iteration() . ": n";
    echo "is fired after 5 seconds and repeats every 2 seconds, nn";

    // Stop the watcher after 5 iterations
    if(Ev::iteration() == 5) {
        $watcher->stop();
    }
    
    // Stop the watcher after 2 more iterations
    if(Ev::iteration() > 7) {
        $watcher->stop();
    }
    
    Ev::iteration() >= 10 and $w->stop();
});

// Create stopped timer. It turns active on an explicit start
$watcherStopped = EvTimer::createStopped(5, 2, function ($watcher) {
    echo "n Stopped timer callback invoked. n";

    // Stop the watcher after 5 iterations
    if(Ev::iteration() == 5) {
        $watcher->stop();
    }
});

// run loop till calling Ev::stop() or all watchers stop
Ev::run();

// Start the stopped timer that is in an inactive mode.
$watcherStopped->start();
echo "nExecute only one iterationn";
Ev::run(Ev::RUN_ONCE);

echo "Restart watcher2n";
$watcher2->again();
Ev::run(Ev::RUN_NOWAIT);

echo "nENDn";
?>

Keluaran


5 seconds crossed

iteration 1:
is fired after 5 seconds and repeats every 2 seconds,

iteration 2:
is fired after 5 seconds and repeats every 2 seconds,

iteration 3:
is fired after 5 seconds and repeats every 2 seconds,

iteration 4:
is fired after 5 seconds and repeats every 2 seconds,

iteration 5:
is fired after 5 seconds and repeats every 2 seconds,

Execute only one iteration

Stopped timer callback invoked.

Restart watcher2

iteration 6:
is fired after 5 seconds and repeats every 2 seconds,

iteration 7:
is fired after 5 seconds and repeats every 2 seconds,

END

Kesimpulan

Jadi, kita telah melihat tentang PHP EvTimer dan utilitasnya. Contoh yang dibuat untuk artikel ini menggunakan komponen kelas EvTmer dan EvWatcher.

Ada konstanta PHP yang telah ditentukan sebelumnya dalam konteks EvTimer. Konstanta ini mengatur perilaku loop peristiwa, pemblokiran, dan lebih banyak pengaturan pengatur waktu.

Kembali ke Atas


Source link

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.