คุณสมบัติของ Workerman

1. พัฒนาโดยใช้ PHP ล้วน

แอปพลิเคชันที่พัฒนาด้วย Workerman สามารถทำงานได้โดยไม่ต้องพึ่งพา php-fpm, apache, nginx หรือตู้คอนเทนเนอร์อื่นๆ ซึ่งทำให้การพัฒนา, เปิดใช้งาน, และการดีบักแอปพลิเคชันของนักพัฒนา PHP สะดวกสบายมากยิ่งขึ้น

2. รองรับ PHP หลายกระบวนการ

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

3. รองรับ TCP และ UDP

Workerman รองรับโปรโตคอลชั้นส่งสองประเภท คือ TCP และ UDP ซึ่งสามารถเปลี่ยนโปรโตคอลการส่งได้เพียงแค่เปลี่ยนคุณสมบัติหนึ่ง ตัวโค้ดธุรกิจก็ไม่ต้องมีการเปลี่ยนแปลงใดๆ

4. รองรับการเชื่อมต่อแบบยาว

ในหลายๆ ครั้งที่แอปพลิเคชัน PHP ต้องการรักษาการเชื่อมต่อแบบยาวกับไคลเอนต์ เช่น ห้องสนทนา เกม เป็นต้น แต่ตู้คอนเทนเนอร์ PHP แบบดั้งเดิม (apache, nginx, php-fpm) มักทำได้ยาก ด้วยการใช้ Workerman หากไม่มีการเรียกใช้ฟังก์ชันปิดการเชื่อมต่อจากธุรกิจเซิร์ฟเวอร์ ก็สามารถใช้การเชื่อมต่อแบบยาวใน PHP ได้ โดยกระบวนการเดียวของ Workerman สามารถรองรับการเชื่อมต่อพร้อมกันได้มากถึงหลายหมื่นการเชื่อมต่อ ขณะที่หลายกระบวนการสามารถรองรับการเชื่อมต่อพร้อมกันหลายแสนถึงหนึ่งล้านการเชื่อมต่อ

5. รองรับโปรโตคอลชั้นแอปพลิเคชันหลากหลาย

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

6. รองรับการใช้งานในปริมาณมาก

Workerman รองรับไลบรารีการวนรอบเหตุการณ์ Libevent (ต้องติดตั้ง event extension) การใช้ Event ในการเชื่อมต่อแบบยาวที่มีปริมาณการใช้งานมากจะทำให้ประสิทธิภาพยอดเยี่ยมมาก ถ้าหากไม่ได้ติดตั้ง Event extension จะใช้การเรียกระบบ Select ที่ PHP มีให้อยู่แล้ว ซึ่งประสิทธิภาพก็ยอดเยี่ยมเช่นกัน

7. รองรับการรีสตาร์ทบริการอย่างราบรื่น

เมื่อจำเป็นต้องรีสตาร์ทบริการ (เช่น การปล่อยเวอร์ชัน) เราไม่ต้องการให้กระบวนการที่กำลังจัดการคำขอของผู้ใช้ถูกยกเลิกทันที และยิ่งไม่ต้องการให้การรีสตาร์ทในช่วงนั้นทำให้การสื่อสารของไคลเอนต์ล้มเหลว Workerman ให้ความสามารถในการรีสตาร์ทอย่างราบรื่น เพื่อให้บริการอัปเกรดได้อย่างราบรื่น ไม่กระทบต่อการใช้งานของไคลเอนต์

8. รองรับการตรวจสอบและโหลดไฟล์อัตโนมัติ

ในระหว่างการพัฒนา เราหวังว่าจะสามารถทำให้การเปลี่ยนแปลงโค้ดมีผลทันที เพื่อดูผลลัพธ์ Workerman มี FileMonitor เพื่อเฝ้าติดตามไฟล์ เมื่อมีการอัปเดตไฟล์ Workerman จะทำการเรียกใช้ reload โดยอัตโนมัติเพื่อโหลดไฟล์ใหม่ ทำให้มีผลทันที

9. รองรับการทำงานของกระบวนการย่อยโดยผู้ใช้ที่กำหนด

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

10. รองรับการรักษาวัตถุหรือทรัพยากรไว้เป็นประจำ

Workerman จะโหลดและวิเคราะห์ไฟล์ PHP เพียงครั้งเดียวในระหว่างการทำงาน จากนั้นจะคงอยู่ในหน่วยความจำ ซึ่งทำให้การประกาศคลาสและฟังก์ชัน สภาพแวดล้อมการทำงานของ PHP และตารางสัญลักษณ์ไม่ถูกสร้างและทำลายซ้ำ และนี่แตกต่างจากกลไก PHP ที่ทำงานอยู่ใต้เว็บคอนเทนเนอร์ ใน Workerman วัตถุสมาชิกนิ่งหรือตัวแปรทั่วไปรักษาไว้ตลอดทั้งวงรอบชีวิตของกระบวนการ หากไม่ถูกยกเลิก จึงสามารถใช้ซ้ำได้ตลอดวงจรชีวิตของกระบวนการนั้น ๆ ตัวอย่างเช่น หากตั้งค่าการเชื่อมต่อฐานข้อมูลเพียงครั้งเดียวภายในกระบวนการเดียว การร้องขอทั้งหมดในกระบวนการนี้สามารถใช้การเชื่อมต่อฐานข้อมูลนี้ได้ โดยหลีกเลี่ยงการเชื่อมต่อฐานข้อมูลบ่อย ๆ รวมถึงการจับมือ TCP สามครั้ง การตรวจสอบสิทธิ์ฐานข้อมูล และการเชื่อมต่อที่ถูกตัดการเชื่อมต่อซึ่งจะมีการจับมือ TCP สี่ครั้ง ทำให้ประสิทธิภาพของแอปพลิเคชันสูงขึ้นอย่างมาก

11. ประสิทธิภาพสูง

เนื่องจากไฟล์ PHP จะถูกอ่านและวิเคราะห์จากดิสก์เพียงครั้งเดียวและคงอยู่ในหน่วยความจำ ในครั้งถัดไปที่ใช้งานจะใช้ opcode ที่อยู่ในหน่วยความจำ مماช่วยลด I/O ของดิสก์และกระบวนการเริ่มต้นคำขอใน PHP ทั้งหลายได้มากมาย เช่น การสร้างสิ่งแวดล้อมการทำงาน การวิเคราะห์ทางไวยากรณ์ การแปล opcode และการปิดคำขอ เพิ่มประสิทธิภาพด้วย ไม่ต้องพึ่งพา nginx, apache หรือตู้คอนเทนเนอร์อื่น ๆ ลดค่าใช้จ่ายในการสื่อสารระหว่าง nginx กับ PHP ที่สำคัญคือ ทรัพยากรสามารถถูกเก็บรักษาไว้เป็นประจำ ไม่ต้องเริ่มการเชื่อมต่อฐานข้อมูลใหม่ทุกครั้ง เพราะฉะนั้นการใช้ Workerman ในการพัฒนาแอปพลิเคชันจะมีประสิทธิภาพสูงมาก

12. รองรับ HHVM

รองรับการทำงานบน HHVM ซึ่งสามารถเพิ่มประสิทธิภาพ PHP ได้หลายเท่า โดยเฉพาะในธุรกิจที่ต้องการการคำนวณ CPU สูง ประสิทธิภาพดีเยี่ยม ผ่านการทดสอบจริงๆ การเปรียบเทียบ โดยในสภาวะที่ไม่มีภาระการทำงาน Workerman จะมีปริมาณการใช้งานสุทธิที่สูงขึ้นประมาณ 30-80% เมื่อทำงานอยู่ใต้ HHVM เมื่อเปรียบเทียบกับ Zend PHP 5.6

13. รองรับการติดตั้งแบบกระจาย

14. รองรับการทำงานในโหมดเป็นโปรเซส

15. รองรับการฟังหลายพอร์ต

16. รองรับการเปลี่ยนเส้นทางการป้อนและส่งข้อมูลมาตรฐาน