ข้อจำกัดของระบบ (System Constraints)
การสร้างแอปพลิเคชัน Real-time ขนาดสเกลใหญ่อาจเต็มไปด้วยข้อควรระวัง RawPush มีความตั้งใจช่วยคุณคุมพื้นที่การพัฒนาระบบให้อยู่ในกรอบที่มีประสิทธิภาพ ด้วยตัวเลขข้อจำกัดเหล่านี้
📦 1. ขีดจำกัดทางฝั่ง Payload และ Data
เมื่อคุณต้องการส่งข้อมูลไปกับคำสั่ง Publish (ไม่ว่าจะผ่านช่อง REST API หรือยิงตรงดิบๆ ผ่าน WebSocket Command) ก้อนข้อมูลทั้งหมดต้องอยู่ในปริมาณที่ระบบรับไหว:
ขนาดของ Payload (Data Size): น้ำหนักสูงสุดต่อ 1 การ Publish คือ 10 KB.
ทำไมถึงต้องกำหนด? ถ้าข้อมูล 1 ชิ้นเป็นไฟล์ขนาดใหญ่ พอ broadcast ไปหา User หมื่นคนพร้อมกัน... bandwidth มหาศาลจะทำให้เบราว์เซอร์ปลายทางค้าง (Browser Freeze)... ควรส่งเป็น URL รูปภาพ หรือ ID แทน แล้วให้ Client ไปโหลดไฟล์เต็มเอง
ความยาวชื่อ Channel: ไม่เกินจุดปลอดภัยสุดที่ 100 ตัวอักษร.
ความยาวของค่า Event: ห้ามยาวเกิน 100 ตัวอักษร.
ทำไมถึงต้องกำหนด? เพราะถ้า Event ของคุณยาวกว่านี้ มันควรจะถูกจับยัดไปซ่อนอยู่ในก้อน Payload (Data) แทนการเอามาตั้งชื่อ
🔌 2. ขีดจำกัดฝั่ง Connection และ Auth
เวลาให้ Auth (Handshake Timeout):
- เมื่อ connect WebSocket (
ws.onopen) สำเร็จ คุณมีเวลา 10 วินาทีถ้วน ที่จะส่ง JSON ของ Commandauth+ HMAC signature กลับมา.. ถ้าไม่ส่ง connection จะถูก close ทันที (Error: 4001)
- เมื่อ connect WebSocket (
อายุสูงสุดของ Token ตัวยืนยัน (Expiration Limit):
- ตอนปั่นรหัส
jti+exp.. เราไม่รับใบเบิกทางที่ระบุเวลาหมดอายุข้างหน้าเกินกว่า 1 วัน (24 ชั่วโมง)... โดยคำแนะนำหลักให้ตั้งกรอบไว้หลวมๆ ที่ 5-10 นาทีก็เยอะเกินพอ!
- ตอนปั่นรหัส
Ping / Pong Interval:
- RawPush จะส่ง Ping ไปหา Client ทุก 30 วินาที (หรือมากกว่า) และ Browser จะตอบ Pong ให้อัตโนมัติ.. ถ้าเน็ตหลุดนานจนระบบไม่ได้รับ Pong กลับ connection จะถูก close
🚦 3. ขีดจำกัดทาง Rate Limit (ความเร็วในการยิง)
ระบบมีการเซนเซอร์การสาดรัวๆ จาก ความเร็วการ Publish ต่อ 1 โปรเจกต์ (Messages_Per_Sec)
- หากเกิน โควต้าตามที่ Plan ของคุณกำหนด... คำสั่ง Broadcast อันล้นขอบของคุณ (ไม่ว่าจะมาทางฝั่ง API Server หรือ WebSocket ยิงเอง) จะถูกดีดกลับ
- แจ้งสถานะ
429 Too Many Requestsถี่ๆ ลงหน้า Error Log ของโปรเจกต์คุณ
(วิธีเพิ่มโควต้านี้ สามารถเจรจาปรับปรุง Scale แผนการใช้งาน ภายใต้หน้าเมนู Usage & Quotas ของ Dashboard ได้เลย!)
