สร้าง Daemons Multiprocess PHP ที่แข็งแกร่งและเสถียรโดยไม่ต้องใช้รหัส Boilerplate คลาส Core Daemon จัดการกับลูปหลักและเหตุการณ์และสามารถทำงานได้ตามความถี่ที่ต้องการ (ภายในขอบเขตของ PHP) คุณจะต้องใช้วิธีการเดียว execute เพื่อเรียกใช้กระบวนการ daemon ซึ่งเป็นทางเลือกในพื้นหลัง
การใช้งานและคนงาน Daemon สามารถเรียกใช้วิธีการในกระบวนการพื้นหลังได้อย่างราบรื่นโดยไม่ต้องกังวลเกี่ยวกับการจัดการเด็กที่แยกจากกัน ปลั๊กอินช่วยให้คุณสร้างรหัสที่ใช้ซ้ำได้และแชร์ได้อย่างง่ายดายสำหรับ daemons ของคุณ ดูส่วนคุณสมบัติด้านล่างสำหรับข้อมูลเพิ่มเติม
เห็นได้ชัดว่าการเขียน daemons ที่แข็งแกร่งมั่นคงและยาวนานใน PHP โดยทั่วไปไม่ใช่ความคิดที่ดี อย่างน้อยก็ยากมากที่จะทำและทำได้ดี โดยส่วนตัวแล้วฉันต้องการ daemon ใน PHP เพราะฉันมีกรอบเว็บไซต์ทั้งหมดที่สร้างขึ้นใน Symfony ซึ่งต้องการ daemon แบ็คเอนด์ที่สำคัญ ฉันต้องการที่จะสามารถใช้การพึ่งพาส่วนหน้าและเอนทิตีทั้งหมดของฉันได้อีกครั้งโดยไม่มีทรัพยากรหรือการกำหนดค่าที่ซ้ำกัน
ในขณะที่ห้องสมุดนี้ทำทุกอย่างเท่าที่จะทำได้เพื่อให้คุณสร้าง Daemon Rock Solid แต่ความระมัดระวังยังคงต้องใช้ในรหัสผู้ใช้-ที่ดินของคุณเพื่อให้สิ่งต่าง ๆ มีเสถียรภาพ
ดู Wiki สำหรับเอกสาร
ดูไดเรกทอรีตัวอย่างสำหรับตัวอย่างที่คุณสามารถเรียกใช้ได้
Main Loop จะถูกเก็บรักษาไว้โดยคลาส core daemon สิ่งที่คุณต้องทำคือใช้วิธีหนึ่งวิธี execute ที่จะเรียกว่าทุกรอบวนรอบ ความถี่วนรอบสามารถเป็นค่าเศษส่วนใด ๆ ในไม่กี่วินาที หากตั้งค่าเป็น 0 วิธี execute ของคุณจะถูกเรียกให้เร็วที่สุดเท่าที่จะเป็นไปได้ ( ไม่แนะนำตามปกติเว้นแต่ว่าลูปของคุณจะทำการบล็อกการโทรบางประเภทเช่นการฟังซ็อกเก็ต ฯลฯ )งานอนุญาตให้คุณโทรหาวิธีการใด ๆ หรือโทรกลับในกระบวนการพื้นหลัง ไม่มีการสื่อสารระหว่างกระบวนการพื้นหลังและผู้ปกครอง งานมีไว้สำหรับสิ่งง่าย ๆ เช่นการส่งอีเมล
คนงานอนุญาตให้คุณเรียกวิธีการใด ๆ บนวัตถุหรือแม้แต่การโทรกลับอย่างง่าย ๆ เช่นงาน คนงานสามารถส่งคืนค่ากลับไปยังผู้ปกครองผ่านคำสั่ง return อย่างง่ายในเมธอดผู้ปฏิบัติงานของคุณ คนงานจะได้รับการดูแลโดยอัตโนมัติและสามารถมีเด็กหลายคนทำงานในเวลาเดียวกันซึ่งได้รับการจัดการอย่างโปร่งใส แม้ว่าคนงานจะตายหรือถูกฆ่าตายโดยระบบปฏิบัติการ Daemon API จะยังคงส่งคืนผลลัพธ์ (หรือข้อยกเว้น) ไปยังรหัสของคุณ ค่าผลตอบแทนของคนงานมักจะเป็นวัตถุ Promise คุณสามารถใช้วิธีการสัญญามาตรฐานได้เช่น then หรือ otherwise เพื่อดำเนินการกับค่าส่งคืน หรือคุณสามารถลงทะเบียนการโทรกลับ ON_RETURN บนคนงาน
คนงานใช้รูปแบบการออกแบบสื่อกลางและใช้หน่วยความจำที่ใช้ร่วมกันสำหรับคิวการส่งข้อความและข้อมูล คลาส IPC ที่แตกต่างกันสามารถสร้างขึ้นเพื่อให้วิธีการสื่อสารทางเลือกระหว่างผู้ปกครองและเด็ก ฉันอาจทำงานในคลาส IPC ที่สองที่ใช้ซ็อกเก็ตแทน SHM เพื่อให้ทางเลือกอื่น
Daemon มีหลายเหตุการณ์ (ดู: กิจกรรม) ที่คุณสามารถเชื่อมต่อได้อย่างง่ายดายด้วยการลงทะเบียนการโทรกลับ บางเหตุการณ์มีวิธีการเปลี่ยนพฤติกรรมของ daemonON_SIGNAL ในรหัสของคุณ การโทรกลับของคุณจะถูกส่ง SignalEvent พร้อมกับสัญญาณที่ถูกจับPlugin อย่างง่ายช่วยให้คุณสามารถใช้และสร้างปลั๊กอินของคุณเองที่สามารถฉีดเข้าไปใน daemon ปลั๊กอินสามารถโหลดได้อย่างเกียจคร้านFileLock ช่วยให้คุณเพิ่มกลไกการล็อคเพื่อป้องกันไม่ให้ daemon ทำงานมากกว่าหนึ่งอินสแตนซ์ในแต่ละครั้ง เพียงลงทะเบียนปลั๊กอินใน daemon ของคุณและส่วนที่เหลือเป็นไปโดยอัตโนมัติ ShmLock นั้นคล้ายคลึงกัน แต่ใช้หน่วยความจำที่ใช้ร่วมกันเพื่อรับล็อคDaemon มีวิธีการบันทึกขั้นพื้นฐาน 3 วิธี: log error debug ทั้งหมดนี้จะเขียนไปยังไฟล์บันทึก (ถ้ากำหนดค่า) หากไฟล์บันทึกถูกหมุนตัวถูกเขียนทับหรือลบ daemon จะตรวจจับสิ่งนี้โดยอัตโนมัติและจะเขียนไปยังไฟล์บันทึกใหม่ต่อไป เหตุการณ์ daemonEvent :: on_log ช่วยให้คุณสามารถลงทะเบียนการโทรกลับเพื่อเปลี่ยนพฤติกรรมได้เช่นกัน รหัสผู้ใช้สามารถใช้ LogTrait เพื่อเพิ่มการบันทึก daemon ดั้งเดิมลงในรหัสของพวกเขาได้อย่างง่ายดายพื้นฐานสำหรับห้องสมุดนี้ได้รับแรงบันดาลใจจากห้องสมุด PHP-Daemon จาก Shane Harter บน GitHub น่าเสียดายที่ห้องสมุดของเขาถูกทอดทิ้ง (หรืออยู่ในช่วงที่ไม่แน่นอน) ถูกเขียนขึ้นสำหรับ PHP v5.3 ไม่มีการกำหนดเวลาไม่มีการจัดการแพ็คเกจหรือโหลดอัตโนมัติ (เช่น: นักแต่งเพลง)
ฉันเลือกที่จะสร้างห้องสมุดใหม่ทั้งหมดแทนการฟอร์กและแก้ไขห้องสมุดดั้งเดิมของเขาเพื่อจุดประสงค์ทางการศึกษา ฉันยังไม่เห็นด้วยกับวิธีการบางอย่างของเขา ฉันต้องการการพึ่งพาพิเศษบางอย่าง แต่นักแต่งเพลงทำให้เรื่องนี้เป็นปัญหาเล็กน้อย
_ ห้องสมุดนี้อยู่ในสถานะทำงานอย่างเต็มที่ ฉันได้สร้าง daemons ที่ซับซ้อนมากซึ่งทำงานเป็นเวลาหลายเดือนโดยไม่มีการรั่วไหลของหน่วยความจำหรือการล่ม สามารถทำได้มากขึ้น ...