หมายเหตุ
ข้อควรระวังในการใช้งานตัวจับเวลา
-
สามารถเพิ่มตัวจับเวลาได้เฉพาะใน callback
onXXXXเท่านั้น ตัวจับเวลาทั่วไปแนะนำให้ตั้งค่าใน callbackonWorkerStartส่วนการตั้งค่าตัวจับเวลาสำหรับการเชื่อมต่อที่เฉพาะเจาะจงแนะนำให้ตั้งค่าในonConnect。 -
งานที่เพิ่มเข้ามาจะทำงานในกระบวนการปัจจุบัน (จะไม่เริ่มกระบวนการหรือเธรดใหม่) งานที่หนักอาจส่งผลกระทบต่อกระบวนการปัจจุบันในการทำงานอื่น ๆ ดังนั้นจึงดีที่สุดที่จะทำให้ภารกิจที่ใช้เวลานานทำงานในกระบวนการแยกต่างหาก เช่น การสร้าง Worker กระบวนการหนึ่งหรือหลายกระบวนการเพื่อลงทะเบียนการทำงาน
-
ในกรณีที่กระบวนการปัจจุบันไม่ได้เปิดใช้งาน swoole/swow coroutine หากกระบวนการปัจจุบันกำลังยุ่งกับธุรกิจอื่นอยู่ หรือเมื่อมีงานที่ไม่เสร็จในเวลาที่คาดหวัง ในขณะที่ถึงรอบการทำงานถัดไป จะต้องรอให้งานปัจจุบันเสร็จสิ้นก่อนจึงจะทำงานได้ ซึ่งอาจทำให้ตัวจับเวลาไม่ทำงานในระยะเวลาที่คาดไว้ กล่าวคือ ธุรกิจในกระบวนการปัจจุบันจะทำงานแบบลำดับเสมอ หากเป็นหลายกระบวนการ งานระหว่างกระบวนการจะทำงานพร้อมกัน
-
ต้องระวังว่าการตั้งค่าตัวจับเวลาในหลายกระบวนการอาจทำให้เกิดปัญหาความขัดแย้ง ตัวอย่างเช่น โค้ดด้านล่างจะพิมพ์ 5 ครั้งต่อวินาที
$worker = new Worker(); // 5 กระบวนการ $worker->count = 5; $worker->onWorkerStart = function(Worker $worker) { // 5 กระบวนการ แต่ละกระบวนการมีตัวจับเวลาดังนี้ Timer::add(1, function(){ echo "hi\r\n"; }); }; Worker::runAll();หากต้องการให้มีการทำงานของตัวจับเวลาเพียงกระบวนการเดียว ให้พิจารณา ตัวอย่าง 2 ของ Timer::add
-
อาจมีความคลาดเคลื่อนประมาณ 1 มิลลิวินาที。
-
ไม่สามารถลบตัวจับเวลาข้ามกระบวนการได้ เช่น ตัวจับเวลาที่ตั้งค่าโดยกระบวนการ a ไม่สามารถเรียกใช้ Timer::del ในกระบวนการ b ได้โดยตรง
-
ID ของตัวจับเวลาในกระบวนการที่แตกต่างกันอาจซ้ำกันได้ แต่ ID ของตัวจับเวลาที่เกิดขึ้นในกระบวนการเดียวกันจะไม่มีการซ้ำกัน
-
การเปลี่ยนแปลงเวลาในระบบจะส่งผลต่อพฤติกรรมของตัวจับเวลา ดังนั้นหลังจากการเปลี่ยนแปลงเวลาในระบบจึงแนะนำให้ restart เพื่อเริ่มต้นใหม่