คอมโพเนนต์ตรวจสอบไฟล์

ประวัติ:

Workerman เป็นการทำงานในหน่วยความจำแบบต่อเนื่อง ซึ่งสามารถหลีกเลี่ยงการอ่านจากดิสก์ซ้ำ หรือการแปลแบบซ้ำของ PHP เพื่อให้ได้ประสิทธิภาพสูงสุด ดังนั้น หลังจากที่มีการเปลี่ยนแปลงโค้ดธุรกิจต้องทำการ reload หรือ restart ด้วยตัวเองถึงจะมีผล

พร้อมนี้ workerman ยังมีการบริการตรวจสอบไฟล์ที่อัปเดต โดยเมื่อตรวจสอบพบว่ามีไฟล์ที่อัปเดตแล้วจะทำการรีโหลดอัตโนมัติ และโหลดไฟล์ PHP แบบใหม่ นักพัฒนาสามารถนำมันไปใช้ได้ทันทีเมื่อเริ่มโครเจค

ลิงก์ดาวน์โหลดบริการตรวจสอบไฟล์:

  1. เวอร์ชันไม่มีความจำเป็น: https://github.com/walkor/workerman-filemonitor

  2. เวอร์ชันที่มีความจำเป็นทั้งหมด: https://github.com/walkor/workerman-filemonitor-inotify (ต้องติดตั้ง ส่วนเสริม inotify)

ความแตกต่างระหว่างเวอร์ชันทั้งสอง:

เวอร์ชันในลิงก์ที่ 1 ใช้วิธีการตรวจสอบเวลาอัปเดตของไฟล์ทุกวินาทีเพื่อตรวจสอบว่าไฟล์ได้รับการอัปเดตหรือไม่

เวอร์ชันในลิงก์ที่ 2 ใช้การแจ้งเตือนจากเคอร์เนลของ Linux inotify เมื่อมีการอัปเดตไฟล์ระบบจะแจ้งเตือน workerman โดยสะท้อนจัดการไฟล์ที่ร้อยเร็ว

โดยทั่วไปมักใช้เวอร์ชันที่ไม่มีความจำเป็น

วิธีการใช้:

เพียงแค่คัดลอกไดเร็กทอรี FileMonitor ไปยังไดเร็กทอรี Applications ในโปรเจกต์ของคุณ

หากโปรเจกต์ของคุณไม่มีไดเร็กทอรี Applications คุณสามารถคัดลอกไฟล์ start.php จากไดเร็กทอรี Applications/FileMonitor ไปยังที่ใดก็ตามในโปรเจกต์ของคุณ และสามารถใช้ require เข้าไปในสคริปต์เริ่มต้นของคุณได้

บริการตรวจสอบมีการตั้งค่าเริ่มต้นเพื่อตรวจสอบไดเร็กทอรี Applications หากต้องการเปลี่ยนแปลงคุณสามารถแก้ไขตัวแปร $monitor_dir ใน start.php ให้เป็นที่อยู่แบบเต็มอย่างยิ่งเชิญที่เหมาะสม

หมายเหตุ:

  • ระบบปฏิบัติไมโครซอร์ ไม่รองรับรีโหลด และจึงไม่สามารถใช้บริการตรวจสอบได้
  • มีผลเฉพาะในโหมด debug เท่านั้น ไม่ได้ดารแชะที่โหมด daemon (สาเหตุที่ไม่รองรับโหมด daemon ดูคำอธิบายด้านล่าง)
  • เฉพาะไฟล์ที่โหลดหลังจากการใช้ Worker::runAll เท่านั้นที่สามารถอัพเดตได้ หรือสามารถบอกระบบเมื่อไฟล์ที่โหลดใน onXXX callback เท่านั้นที่สามารถอัพเดตได้

เหตุใดไม่สนับสนุนโหมด daemon?

โหมด daemon ทำหน้าที่เป็นโหมดที่ทำงานของสภาพแวดล้อมที่เป็นการทำงานของระบบในอินเตอร์เนต การเผยแพร่เวอร์ชันในสภาพแวดล้อมการทำงานต้องการการให้บริการหลายไฟล์พร้อมๆ กัน และไฟล์ที่โดยอาจมีการตามที่ใดไปที่อื่น ๆ ก็เป็นไปได้
เนื่องด้วยการซิงค์ไฟล์หลายไฟล์ไปยังดิสก์ต้องใช้เวลา ซึ่งอาจจะทำให้ไฟล์บางไฟล์หายไปในเวลาใดๆ ที่มั้น ถ้าตรวจสอบไปว่ามีการอัปเแต และดำเนินการ reload โดยตรงจะเป็นความเสี่ยงต่อการเกิดข้อผิดพลาดโดยสุ่ม
อีกอย่างที่เป็นกันได้ได้เวลาการใช้งานจะมักผู้ด้วยดี้ยพ็อ้งแหเุบค่้แบตจูกเรียวัเใถ็่ฟเหช้ยค่ิจใบัยิหดทา้ยารอนาเบ็บง้ยอะสดำำบ
}\" ตัวแปร

"* ระบบปฏิบัติไมโครซอร์ ไม่รองรับรีโหลด และจึงไม่สามารถใช้บริการตรวจสอบได้

  • มีผลเฉพาะในโหมด debug เท่านั้น ไม่ได้ดารแชะที่โหมด daemon (สาเหตุที่ไม่รองรับโหมด daemon ดูคำอธิบายด้านล่าง)
  • เฉพาะไฟล์ที่โหลดหลังจากการใช้ Worker::runAll เท่านั้นที่สามารถอัพเดตได้ หรือสามารถบอกระบบเมื่อไฟล์ที่โหลดใน onXXX callback เท่านั้นที่สามารถอัพเดตได้

เหตุใดไม่สนับสนุนโหมด daemon?

โหมด daemon ทำหน้าที่เป็นโหมดที่ทำงานของสภาพแวดล้อมที่เป็นการทำงานของระบบในอินเตอร์เนต การเผยแพร่เวอร์ชันในสภาพแวดล้อมการทำงานต้องการการให้บริการหลายไฟล์พร้อมๆ กัน และไฟล์ที่โดยอาจมีการตามที่ใดไปที่อื่น ๆ ก็เป็นไปได้
เนื่องด้วยการซิงค์ไฟล์หลายไฟล์ไปยังดิสก์ต้องใช้เวลา ซึ่งอาจจะทำให้ไฟล์บางไฟล์หายไปในเวลาใดๆ ที่มั้น ถ้าตรวจสอบไปว่ามีการอัปเแต และดำเนินการ reload โดยตรงจะเป็นความเสี่ยงต่อการเกิดข้อผิดพลาดโดยสุ่ม อีกอย่างที่เป็นกันได้ที่เป็นโทรท็จายว็จาัำ้นล';

ถ้านักพัฒนาต้องการให้โหมด daemon เปิดใช้งานการตรวจสอบและอัพเดตไฟล์อัตโนมัติ สามารถแก้ไขโค้ดใน start.php ในส่วนของ Worker::$daemonize ให้ถอดการค้าแก้ไขออกได้