คอมโพเนนต์ตรวจสอบไฟล์
ประวัติ:
Workerman เป็นการทำงานในหน่วยความจำแบบต่อเนื่อง ซึ่งสามารถหลีกเลี่ยงการอ่านจากดิสก์ซ้ำ หรือการแปลแบบซ้ำของ PHP เพื่อให้ได้ประสิทธิภาพสูงสุด ดังนั้น หลังจากที่มีการเปลี่ยนแปลงโค้ดธุรกิจต้องทำการ reload หรือ restart ด้วยตัวเองถึงจะมีผล
พร้อมนี้ workerman ยังมีการบริการตรวจสอบไฟล์ที่อัปเดต โดยเมื่อตรวจสอบพบว่ามีไฟล์ที่อัปเดตแล้วจะทำการรีโหลดอัตโนมัติ และโหลดไฟล์ PHP แบบใหม่ นักพัฒนาสามารถนำมันไปใช้ได้ทันทีเมื่อเริ่มโครเจค
ลิงก์ดาวน์โหลดบริการตรวจสอบไฟล์:
-
เวอร์ชันไม่มีความจำเป็น: https://github.com/walkor/workerman-filemonitor
-
เวอร์ชันที่มีความจำเป็นทั้งหมด: 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 ให้ถอดการค้าแก้ไขออกได้