หมายเหตุ

ข้อควรระวังในการใช้งานตัวจับเวลา

  1. สามารถเพิ่มตัวจับเวลาได้เฉพาะใน callback onXXXX เท่านั้น ตัวจับเวลาทั่วไปแนะนำให้ตั้งค่าใน callback onWorkerStart ส่วนการตั้งค่าตัวจับเวลาสำหรับการเชื่อมต่อที่เฉพาะเจาะจงแนะนำให้ตั้งค่าใน onConnect

  2. งานที่เพิ่มเข้ามาจะทำงานในกระบวนการปัจจุบัน (จะไม่เริ่มกระบวนการหรือเธรดใหม่) งานที่หนักอาจส่งผลกระทบต่อกระบวนการปัจจุบันในการทำงานอื่น ๆ ดังนั้นจึงดีที่สุดที่จะทำให้ภารกิจที่ใช้เวลานานทำงานในกระบวนการแยกต่างหาก เช่น การสร้าง Worker กระบวนการหนึ่งหรือหลายกระบวนการเพื่อลงทะเบียนการทำงาน

  3. ในกรณีที่กระบวนการปัจจุบันไม่ได้เปิดใช้งาน swoole/swow coroutine หากกระบวนการปัจจุบันกำลังยุ่งกับธุรกิจอื่นอยู่ หรือเมื่อมีงานที่ไม่เสร็จในเวลาที่คาดหวัง ในขณะที่ถึงรอบการทำงานถัดไป จะต้องรอให้งานปัจจุบันเสร็จสิ้นก่อนจึงจะทำงานได้ ซึ่งอาจทำให้ตัวจับเวลาไม่ทำงานในระยะเวลาที่คาดไว้ กล่าวคือ ธุรกิจในกระบวนการปัจจุบันจะทำงานแบบลำดับเสมอ หากเป็นหลายกระบวนการ งานระหว่างกระบวนการจะทำงานพร้อมกัน

  4. ต้องระวังว่าการตั้งค่าตัวจับเวลาในหลายกระบวนการอาจทำให้เกิดปัญหาความขัดแย้ง ตัวอย่างเช่น โค้ดด้านล่างจะพิมพ์ 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

  5. อาจมีความคลาดเคลื่อนประมาณ 1 มิลลิวินาที。

  6. ไม่สามารถลบตัวจับเวลาข้ามกระบวนการได้ เช่น ตัวจับเวลาที่ตั้งค่าโดยกระบวนการ a ไม่สามารถเรียกใช้ Timer::del ในกระบวนการ b ได้โดยตรง

  7. ID ของตัวจับเวลาในกระบวนการที่แตกต่างกันอาจซ้ำกันได้ แต่ ID ของตัวจับเวลาที่เกิดขึ้นในกระบวนการเดียวกันจะไม่มีการซ้ำกัน

  8. การเปลี่ยนแปลงเวลาในระบบจะส่งผลต่อพฤติกรรมของตัวจับเวลา ดังนั้นหลังจากการเปลี่ยนแปลงเวลาในระบบจึงแนะนำให้ restart เพื่อเริ่มต้นใหม่