ข้อกำนด การใช้ PHP Swoole กับ Laravel Framework
จากบทความ ก่อนหน้านี้ เขียน API ด้วย PHP อย่างไรให้รองรับ Load มากกว่า จะเห็นความ Wow ของ Swoole กันมาแล้ว เนื่องจาก การทำงานของ Swoole ออกมาเพื่อทำให้ PHP รองรับ Request มากขึ้นดังนั้น lib, ฟังก์ชั่น, หรือ Framework ส่วนไหนที่มันทำงานช้า ทาง Swoole ก็ออกข้อกำหนดมา สำหรับคนที่เขียน php ธรรมดาก็ไม่ค่อยมีผลมาก แต่คนที่เขียนด้วย PHP Framework อย่าง Laravel ก็ต้องมีการปรับตัวกันหน่อย
ติดตามข้อกำหนดตามนี้
- ต้อง Reload swoole_http_server หลังจากอัพโหลดโค้ดใหม่ทุกครั้ง
- ห้ามใช้ ฟังก์ชั่นเหล่านี้ในการ Debug เพื่อดูข้อความ dd(), exit() or die() *** ไม่ได้นะอย่าหาทำ มันจำทำให้ swoole worker หยุดทำงาน ไปด้วย ***
- ตัวแปล global และ Static เราต้อง reset() เอง
- ข้อนี้ไม่บังคับแต่จะทำให้เปลืองแรม
// ตัวอย่าง Class class Test { public static $array = []; public static $string = ''; } // Controller public function test(Request $req) { // Memory leak Test::$array[] = $req->input('param1'); Test::$string .= $req->input('param2'); } // แบบนี้อย่าหาทำ
- ฟังก์ชั่นจำพวกจัดการกับ output เป็นช่วงๆ flush(), ฟังก์ชัน ob_flush() ทำหน้าที่ Flush (ส่ง) บัฟเฟอร์เอาต์พุต, ob_end_flush(), ob_implicit_flush() จะใช้ไม่ได้นะครับ
- ห้ามใช้ ฟังก์ชั่นที่ส่ง Output ก่อนทำงานจบเช่น php function header ที่จะบอก browser ว่า output เป็นอะไรผ่านทาง http, ฟังก์ชั่น setcookie() : ใช้ในการกำหนดค่าของคุ้กกี้, ()
- ส่วนของ Header ที่ Request เข้ามาไม่เกิน 8Kb นะครับ (ปกติ Header Apache ก็ Default อยู่ที่ 8Kb อยู่แล้วข้อนี้ไม่น่าจะเป็นปัญหากับใครที่ไม่ได้ใช้ท่ายาก)
- POST สูงสุดทั้ง data และ file จำกัดอยู่ที่ 10 MB ใครต้องทำฟอร์มรับค่าเยอะๆ หรือ อัพไฟล์ขนาดใหญ่ หมดสิทธิ์ใช้ swoole นะครับ
- ข้อนี้แถว จาก คู่มือของ swoole บอกว่าแนะนำให้ศึกษาการเขียน แบบ multi-process programming เพิ่มเดิมนะครับเพื่อรีดความสามารถของ swoole ออกมาได้อีกเยอะๆ
จะเห็นว่าข้อกำหนด ถ้าเราจะมาสรุปเป็นหมวดๆ จะได้อออกมา 3 กลุ่มคือ กลุ่มของ Request ที่มีกฏเพิ่มขึ้น, ส่วนของการประมวลผลกลาง, และส่วนของ Response ที่ถูกกำกัด และ ห้ามใช้ฟังก์ชั่นที่ลัดขั้นตอน หรือ เปิดรับมากเกินไป ของทั้งสามกลุ่มนี้ ศึกษา PHP Framework เพิ่มเติมได้ที่นี่ บทเรียน PHP - Joomla Framework
โปรเจ็คที่น่าสนใจที่นำ Swoole มาใช้กับ Laravel และ Framework ตัวอื่นๆ
- A high performance HTTP sever based on Swoole. Speed up your Laravel or Lumen
https://github.com/swooletw/laravel-swoole - SlimPHP applications with Swoole.
https://github.com/pachico/slim-swoole - An integration with yii2 and Swoole.
https://github.com/liufee/yii2-swoole - An integration with Phalcon and Swoole
https://github.com/phwoolcon/phwoolcon
ติดตาม บทความอื่นๆ เกี่ยวกับ Swoole ของเว็บเราได้ที่นี่