workermanนักพัฒนาต้องรู้เกี่ยวกับปัญหาหลายประการ

1、ข้อจำกัดในระบบปฏิบัติการ Windows

ในระบบ Windows workerman สนับสนุนการเชื่อมต่อเพียง 200+ ต่อ 1 โปรเซส
ในระบบ Windows ไม่สามารถใช้พารามิเตอร์ count ในการตั้งค่าหลายโปรเซส
ในระบบ Windows ไม่สามารถใช้คำสั่ง status, stop, reload, restart และอื่นๆ
ในระบบ Windows ไม่สามารถทำให้มีโปรเซสทำงานเบื้องหลังได้ เมื่อปิดหน้าต่าง cmd บริการจะหยุดทันที
ในระบบ Windows ไม่สามารถเริ่มฟังหลายรายการในไฟล์เดียว
ระบบ Linux ไม่มีข้อจำกัดข้างต้น แนะนำให้ใช้ระบบ Linux ในสภาพแวดล้อมจริง ส่วนสภาพแวดล้อมการพัฒนาสามารถเลือกใช้ Windows ได้

2、workerman ไม่พึ่งพา apache หรือ nginx

workerman เองได้เป็นตัวกลางที่คล้าย apache/nginx เพียงแค่ PHP environment OK workerman ก็สามารถทำงานได้

3、workerman เริ่มต้นด้วยคำสั่ง

วิธีการเริ่มต้นจะคล้ายคลึงกับการใช้คำสั่งของ apache (โดยปกติพื้นที่เว็บไม่สามารถใช้ workerman ได้) หน้าจอเริ่มต้นจะมีลักษณะดังนี้

4、การเชื่อมต่อยาวต้องมีการรักษาสถานะ

การเชื่อมต่อยาวต้องมีการรักษาสถานะ การเชื่อมต่อยาวต้องมีการรักษาสถานะ การเชื่อมต่อยาวต้องมีการรักษาสถานะ คำสำคัญต้องพูดสามครั้ง
การเชื่อมต่อยาวหากไม่มีการสื่อสารเป็นเวลานานจะถูกโหนดเราท์เตอร์ทำความสะอาดทำให้การเชื่อมต่อถูกปิด
workerman การอธิบายการรักษาสถานะgatewayWorker การอธิบายการรักษาสถานะ

5、โปรโตคอลของคล้ายกันระหว่างไคลเอ็นต์และเซิร์ฟเวอร์

นี่คือปัญหาที่นักพัฒนาพบได้บ่อย ตัวอย่างเช่น หากไคลเอ็นต์ใช้โปรโตคอล websocket เซิร์ฟเวอร์จะต้องเป็นโปรโตคอล websocket ด้วย (เซิร์ฟเวอร์ new Worker('websocket://0.0.0.0...')) จึงจะสามารถเชื่อมต่อและสื่อสารได้
อย่าพยายามเข้าถึงพอร์ตโปรโตคอล websocket ผ่านแถบที่อยู่ของเบราว์เซอร์ อย่าพยายามใช้โปรโตคอล websocket เข้าถึงพอร์ต tcp ที่เปลือยบริสุทธิ์ โปรโตคอลต้องตรงกัน

หลักการที่นี่คล้ายกับหากคุณต้องการสื่อสารกับคนอังกฤษ คุณต้องใช้ภาษาอังกฤษ หากคุณต้องการสื่อสารกับคนญี่ปุ่น คุณต้องใช้ภาษาญี่ปุ่น ที่นี่ภาษานั้นคล้ายกับโปรโตคอลการสื่อสาร ทั้งสองฝ่าย (ไคลเอ็นต์และเซิร์ฟเวอร์) ต้องใช้ภาษาที่เหมือนกันเพื่อทำการสื่อสาร มิฉะนั้นจะไม่สามารถติดต่อได้

6、สาเหตุที่การเชื่อมต่อไม่สำเร็จ

ปัญหาหนึ่งที่พบได้บ่อยเมื่อเริ่มใช้ workerman คือการเชื่อมต่อจากไคลเอ็นต์ไปยังเซิร์ฟเวอร์ล้มเหลว สาเหตุที่พบบ่อยมีดังนี้:
1、ไฟร์วอลล์ของเซิร์ฟเวอร์ (รวมถึงกลุ่มความปลอดภัยของเซิร์ฟเวอร์คลาวด์) ป้องกันการเชื่อมต่อ (มีโอกาส 50%)
2、โปรโตคอลที่ใช้ระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ไม่ตรงกัน (มีโอกาส 30%)
3、เขียน ip หรือพอร์ตผิด (มีโอกาส 15%)
4、เซิร์ฟเวอร์ไม่ได้เริ่มต้น

7、อย่าใช้คำสั่ง exit die sleep

การใช้คำสั่ง exit die ในการดำเนินธุรกิจจะทำให้โปรเซสออก และแสดงข้อผิดพลาด WORKER EXIT UNEXPECTED แน่นอนว่า เมื่อโปรเซสถูกออกจะมีการรีสตาร์ทโปรเซสใหม่เพื่อดำเนินการต่อ หากต้องการส่งกลับให้เรียกใช้ return คำสั่ง sleep จะทำให้โปรเซสนอนหลับ ในระหว่างที่นอนหลับจะไม่ดำเนินการทางธุรกิจใด ๆ และเฟรมเวิร์กจะหยุดทำงาน ส่งผลให้คำขอทั้งหมดจากไคลเอ็นต์ในโปรเซสนั้นไม่สามารถประมวลผลได้

8、อย่าใช้ฟังก์ชัน pcntl_fork

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

9、โค้ดธุรกิจอย่าใส่วงกลมไม่มีที่สิ้นสุด

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

10、การแก้ไขโค้ดต้องรีสตาร์ท

workerman เป็นเฟรมเวิร์กที่ทำงานอยู่ในหน่วยความจำ ต้องรีสตาร์ท workerman เพื่อดูผลกระทบของโค้ดใหม่

11、แอปพลิเคชันเชื่อมต่อยาวแนะนำให้ใช้เฟรมเวิร์ก GatewayWorker

นักพัฒนาหลายคนที่ใช้ workerman มักจะต้องพัฒนาแอปพลิเคชันที่ เชื่อมต่อยาว เช่น การส่งข้อความทันที อินเทอร์เน็ตของสรรพสิ่ง เป็นต้น แอปพลิเคชันเชื่อมต่อยาว แนะนำใช้เฟรมเวิร์ก GatewayWorker ซึ่งได้มีการห่อหุ้มเพิ่มเติมบนพื้นฐานของ workerman ทำให้การพัฒนาแอปพลิเคชันเชื่อมต่อยาวทำได้ง่ายขึ้นและสะดวกยิ่งขึ้น

12、รองรับการเชื่อมต่อแบบขนาดใหญ่
หากจำนวนการเชื่อมต่อพร้อมกันในธุรกิจเกิน 1000 เข้าสู่ระบบพร้อมกัน กรุณา ปรับแต่งเคอร์เนล Linux และ ติดตั้งส่วนขยาย event