Buat daemon multiprocess php yang kuat dan stabil tanpa kode boilerplate. Kelas daemon inti menangani loop dan acara utama dan dapat berjalan pada frekuensi apa pun yang diinginkan (dalam batas PHP) . Anda hanya perlu mengimplementasikan satu metode execute untuk menjalankan proses daemon, secara opsional di latar belakang.
Menggunakan tugas dan pekerja Daemon dapat memanggil metode pada proses latar belakang dengan mulus tanpa khawatir tentang mengelola anak -anak yang bercabang. Plugin memungkinkan Anda untuk dengan mudah membuat kode yang dapat digunakan kembali dan dapat dibagikan untuk daemon Anda. Lihat bagian Fitur di bawah untuk informasi lebih lanjut.
Jelas, menulis daemon yang kuat, stabil, dan jangka panjang dalam PHP umumnya bukan ide yang baik. Setidaknya sangat sulit dilakukan, dan melakukannya dengan baik. Saya pribadi membutuhkan daemon di PHP karena saya memiliki seluruh kerangka kerja situs web yang dibangun di Symfony yang membutuhkan daemon back-end utama. Saya ingin dapat menggunakan kembali semua dependensi dan entitas front-end saya tanpa menduplikasi sumber daya atau konfigurasi.
Sementara perpustakaan ini melakukan segala yang dapat Anda lakukan untuk membuat daemon rock solid, perawatan masih harus diambil dalam kode lahan pengguna Anda untuk menjaga hal-hal stabil.
Lihat wiki untuk dokumentasi.
Lihat Direktori Contoh untuk contoh yang dapat Anda jalankan.
Main Loop dikelola oleh kelas inti daemon. Yang harus Anda lakukan adalah mengimplementasikan satu metode execute yang akan dipanggil setiap siklus loop. Frekuensi loop dapat berupa nilai fraksional dalam detik. Jika diatur ke 0, metode execute Anda akan dipanggil secepat mungkin ( biasanya tidak disarankan, kecuali jika loop Anda melakukan semacam panggilan pemblokiran, yaitu: mendengarkan soket, dll ).Tugas memungkinkan Anda untuk memanggil metode atau panggilan balik apa pun dalam proses latar belakang. Tidak ada komunikasi yang dibuat antara proses latar belakang dan orang tua. Tugas dimaksudkan untuk hal -hal sederhana, misalnya: Mengirim email.
Seorang pekerja memungkinkan Anda untuk memanggil metode apa pun pada suatu objek, atau bahkan hanya panggilan balik sederhana seperti tugas. Pekerja dapat mengembalikan nilai kembali ke orang tua melalui pernyataan return sederhana dalam metode pekerja Anda. Pekerja dipelihara secara otomatis dan dapat memiliki banyak anak berlari pada saat yang sama, yang ditangani secara transparan. Bahkan jika seorang pekerja meninggal atau dibunuh oleh OS, Daemon API masih akan mengembalikan hasil (atau pengecualian) ke kode Anda. Nilai pengembalian pekerja biasanya merupakan objek Promise . Anda dapat menggunakan metode janji standar seperti then otherwise untuk bertindak berdasarkan nilai pengembalian. Atau Anda dapat mendaftarkan panggilan balik ON_RETURN pada pekerja.
Pekerja menggunakan pola desain mediator dan menggunakan memori bersama untuk antrian dan data pesannya. Kelas IPC yang berbeda dapat dibuat untuk memberikan metode komunikasi alternatif antara orang tua dan anak -anak. Saya mungkin mengerjakan kelas IPC kedua yang menggunakan soket alih -alih SHM untuk memberikan pilihan alternatif .
Daemon inti memiliki beberapa acara (lihat: acara) yang dapat Anda berinteraksi dengan dengan mudah dengan mendaftarkan panggilan balik. Beberapa peristiwa memiliki sarana untuk mengubah perilaku daemon.ON_SIGNAL di kode Anda. Panggilan balik Anda akan diloloskan sebagai SignalEvent dengan sinyal yang ditangkap.Plugin sederhana memungkinkan Anda untuk menggunakan dan membuat plugin sendiri yang dapat disuntikkan ke dalam daemon. Plugin dapat dimuat dengan malas.FileLock plugin inti memungkinkan Anda menambahkan mekanisme penguncian untuk mencegah daemon Anda menjalankan lebih dari satu contoh sekaligus. Cukup daftarkan plugin di daemon Anda dan sisanya otomatis. ShmLock serupa tetapi menggunakan memori bersama untuk mendapatkan kunci.Daemon memiliki 3 metode logging dasar: log , error , debug . Semua ini akan menulis ke file log (jika dikonfigurasi). Jika file log diputar, ditimpa atau dihapus, daemon akan secara otomatis mendeteksi ini dan akan terus menulis ke file log baru. Acara DaemonEvent :: ON_LOG memungkinkan Anda untuk mendaftarkan panggilan balik untuk mengubah perilaku juga. Kode pengguna dapat menggunakan logtrait untuk dengan mudah menambahkan penebangan daemon asli ke kode mereka.Dasar untuk perpustakaan ini terinspirasi oleh Perpustakaan PHP-Daemon dari Shane Harter di GitHub. Sayangnya, perpustakaannya ditinggalkan (atau dalam hiatus tidak terbatas), ditulis untuk PHP v5.3, tidak memiliki nama, tidak ada manajemen paket atau pemuat otomatis (yaitu: komposer).
Saya memilih untuk membuat perpustakaan yang sama sekali baru daripada bercabang dan memodifikasi perpustakaan aslinya untuk tujuan pendidikan. Saya juga tidak setuju dengan beberapa metodologinya. Saya memang membutuhkan beberapa ketergantungan tambahan, tetapi komposer menjadikan ini masalah yang sepele.
_ Perpustakaan ini dalam keadaan bekerja sepenuhnya. Saya telah membuat daemon yang sangat kompleks yang telah berjalan selama berbulan -bulan tanpa bocor memori atau crash. Lebih banyak yang bisa dilakukan ...