รหัสปิด WebSocket และรหัสข้อผิดพลาด Pusher
ความหมายของแต่ละรหัสและวิธีแก้: รหัสปิดมาตรฐานของ WebSocket (1000–1015) และรหัสข้อผิดพลาดของโปรโตคอล Pusher (4000–4399) ซึ่ง Hibira และบริการอื่นที่เข้ากันได้กับ Pusher ก็ส่งเช่นกัน
รหัสของโปรโตคอล Pusher
เซิร์ฟเวอร์ Pusher จะส่งข้อความ pusher:error พร้อมรหัสและเหตุผล แล้วปิดการเชื่อมต่อด้วยรหัสเดียวกัน ช่วงของรหัสบอกไคลเอนต์ว่าต้องทำอะไรต่อ
4000 SSL only
แอปนี้รับเฉพาะการเชื่อมต่อที่เข้ารหัส
วิธีแก้: เชื่อมต่อด้วย wss:// (ใน pusher-js ตั้ง forceTLS: true)
ไม่เชื่อมต่อใหม่ด้วยการตั้งค่าเดิม4001 Application does not exist
ไม่มีแอปที่ใช้คีย์นี้บนโฮสต์นี้
วิธีแก้: ตรวจสอบคีย์แอปและโฮสต์ (หรือคลัสเตอร์): คีย์จากบริการหรือภูมิภาคหนึ่งใช้กับที่อื่นไม่ได้
ไม่เชื่อมต่อใหม่ด้วยการตั้งค่าเดิม4003 Application disabled
มีแอปอยู่ แต่ถูกปิดใช้งาน
วิธีแก้: เปิดแอปอีกครั้งในแดชบอร์ด หรือตรวจสอบสถานะการเรียกเก็บเงินของบัญชี
ไม่เชื่อมต่อใหม่ด้วยการตั้งค่าเดิม4004 Over connection quota
แอปเปิดการเชื่อมต่อครบตามที่แพ็กเกจอนุญาตแล้ว
วิธีแก้: รอให้การเชื่อมต่ออื่นปิด ปิดแท็บที่ไม่ใช้ หรือเปลี่ยนไปใช้แพ็กเกจที่รองรับการเชื่อมต่อมากขึ้น
ไม่เชื่อมต่อใหม่ด้วยการตั้งค่าเดิม4005 Path not found
พาธของ URL ไม่ใช่ /app/APP_KEY
วิธีแก้: ตรวจสอบพาธ WebSocket: พร็อกซีและการตั้งค่า wsPath ที่ผิดมักเป็นสาเหตุ
ไม่เชื่อมต่อใหม่ด้วยการตั้งค่าเดิม4006 Invalid version string format
ไคลเอนต์ส่งเวอร์ชันที่เซิร์ฟเวอร์อ่านไม่ได้
วิธีแก้: ใช้ไลบรารีไคลเอนต์ทางการ หรือส่ง protocol=7 ใน URL
ไม่เชื่อมต่อใหม่ด้วยการตั้งค่าเดิม4007 Unsupported protocol version
เซิร์ฟเวอร์ไม่รองรับเวอร์ชันโปรโตคอลที่ไคลเอนต์ขอ
วิธีแก้: อัปเดตไลบรารีไคลเอนต์ โปรโตคอลปัจจุบันคือ 7
ไม่เชื่อมต่อใหม่ด้วยการตั้งค่าเดิม4008 No protocol version supplied
URL ไม่มีพารามิเตอร์ protocol
วิธีแก้: เพิ่ม ?protocol=7 ใน URL หรือใช้ไลบรารีไคลเอนต์ทางการ
ไม่เชื่อมต่อใหม่ด้วยการตั้งค่าเดิม4009 Connection is unauthorized
เซิร์ฟเวอร์ปฏิเสธการเชื่อมต่อนี้: บน Hibira สาเหตุที่พบบ่อยที่สุดคือ origin ของหน้าเว็บไม่ได้รับอนุญาต
วิธีแก้: เพิ่ม origin ของเว็บไซต์ (สคีม โฮสต์ และพอร์ต) ในรายการ origin ที่อนุญาตของแอป ข้อความ pusher:error ก่อนการปิดจะบอกว่าการตรวจสอบใดไม่ผ่าน
ไม่เชื่อมต่อใหม่ด้วยการตั้งค่าเดิม4100 Over capacity
เซิร์ฟเวอร์ไม่ว่าง หรือมีการเชื่อมต่อจากที่อยู่เดียวกันพร้อมกันมากเกินไป
วิธีแก้: ส่วนใหญ่ไม่ต้องทำอะไร: ไคลเอนต์จะลองใหม่แบบเว้นระยะ ถ้าเกิดซ้ำๆ ให้กระจายเวลาการเชื่อมต่อใหม่ แทนที่จะให้ไคลเอนต์ทุกตัวเชื่อมต่อใหม่พร้อมกัน
เชื่อมต่อใหม่แบบเว้นระยะ (back-off)4200 Generic reconnect immediately
เซิร์ฟเวอร์ขอให้ไคลเอนต์เชื่อมต่อใหม่ เช่น เพราะกำลังรีสตาร์ต
วิธีแก้: ไม่ต้องทำอะไร: ไคลเอนต์จะเชื่อมต่อใหม่ทันที
เชื่อมต่อใหม่ทันที4201 Pong reply not received
เซิร์ฟเวอร์ส่ง ping แต่ไม่ได้รับ pong กลับมาทันเวลา
วิธีแก้: มักเกิดจากแท็บที่อยู่ในโหมดพัก หรือเครือข่ายมือถือที่สัญญาณอ่อน ถ้าคุณเขียนไคลเอนต์เอง ให้ตอบ pusher:ping ด้วย pusher:pong
เชื่อมต่อใหม่ทันที4202 Closed after inactivity
การเชื่อมต่อว่างนานเกินไป
วิธีแก้: ไม่ต้องทำอะไร: ไคลเอนต์จะเชื่อมต่อใหม่ ตั้ง activity timeout ของไคลเอนต์ให้สั้นกว่าของเซิร์ฟเวอร์
เชื่อมต่อใหม่ทันที4301 Client event rejected due to rate limit
อีเวนต์ของไคลเอนต์หนึ่งรายการถูกทิ้ง เพราะการเชื่อมต่อนี้ส่งมากและเร็วเกินไป (หรือบน Hibira โควตาข้อความรายวันหมด) การเชื่อมต่อยังเปิดอยู่
วิธีแก้: ลดจำนวนอีเวนต์ของไคลเอนต์ต่อวินาที เช่น จำกัดความถี่ของอีเวนต์กำลังพิมพ์หรือเคอร์เซอร์
การเชื่อมต่อยังเปิดอยู่
รหัสมาตรฐานของ WebSocket
รหัสเหล่านี้มาจากมาตรฐาน WebSocket (RFC 6455) และใช้กับเซิร์ฟเวอร์ WebSocket ทุกตัว
1000 Normal Closure
การเชื่อมต่อถูกปิดโดยตั้งใจ และงานเสร็จแล้ว
วิธีแก้: ไม่มีอะไรต้องแก้
1001 Going Away
หน้าเว็บถูกปิดหรือโหลดใหม่ หรือเซิร์ฟเวอร์กำลังปิดตัว
วิธีแก้: ไม่มีอะไรต้องแก้ เชื่อมต่อใหม่เมื่อหน้าเว็บหรือเซิร์ฟเวอร์กลับมา
1002 Protocol Error
ฝั่งใดฝั่งหนึ่งส่งเฟรมที่ผิดโปรโตคอล WebSocket
วิธีแก้: ตรวจดูว่ามีพร็อกซีที่แก้ไขทราฟฟิก หรือไลบรารีของไคลเอนต์กับเซิร์ฟเวอร์ไม่เข้ากันหรือไม่
1003 Unsupported Data
ข้อความเป็นชนิดที่อีกฝั่งรับไม่ได้ เช่น ข้อมูลไบนารีที่ส่งไปยังเซิร์ฟเวอร์ที่รับแต่ข้อความ
วิธีแก้: ส่งชนิดที่เซิร์ฟเวอร์ต้องการ (เซิร์ฟเวอร์ Pusher รับข้อความ JSON)
1005 No Status Received
เฟรมปิดไม่มีรหัส เบราว์เซอร์รายงานค่านี้ แต่ไม่มีการส่งจริง
วิธีแก้: รหัสนี้อย่างเดียวบอกสาเหตุไม่ได้ ดูบันทึกของเซิร์ฟเวอร์ตอนที่ปิดการเชื่อมต่อ
1006 Abnormal Closure
การเชื่อมต่อหลุดโดยไม่มีเฟรมปิด: เครือข่าย TLS พร็อกซี หรือเซิร์ฟเวอร์เป็นฝ่ายตัด เบราว์เซอร์รายงานค่านี้ แต่ไม่มีการส่งจริง
วิธีแก้: ตรวจสอบโฮสต์และพอร์ต การใช้ wss:// กับ ws:// ใบรับรอง และเวลาตัดการเชื่อมต่อที่ว่างของพร็อกซีหรือโหลดบาลานเซอร์ (ส่ง heartbeat ถี่กว่าเวลาที่การเชื่อมต่อว่างถูกตัด) ในเบราว์เซอร์ คอนโซลมักแสดงสาเหตุ
1007 Invalid Frame Payload Data
ข้อความตัวอักษรไม่ใช่ UTF-8 ที่ถูกต้อง
วิธีแก้: เข้ารหัสข้อความเป็น UTF-8 หรือส่งเป็นไบนารี
1008 Policy Violation
เซิร์ฟเวอร์ปฏิเสธข้อความหรือการเชื่อมต่อตามกฎของตัวเอง เช่น การยืนยันตัวตนหรือการตรวจสอบ origin
วิธีแก้: ตรวจสอบกฎของเซิร์ฟเวอร์และเหตุผลในการปิด
1009 Message Too Big
ข้อความใหญ่กว่าที่อีกฝั่งรับได้
วิธีแก้: ส่งข้อความให้เล็กลง หรือแบ่งข้อความใหญ่
1010 Mandatory Extension
ไคลเอนต์ต้องการส่วนขยายที่เซิร์ฟเวอร์ไม่ยอมรับ
วิธีแก้: ปิดส่วนขยายนั้นที่ไคลเอนต์ หรือเปิดใช้ที่เซิร์ฟเวอร์
1011 Internal Error
เซิร์ฟเวอร์เจอข้อผิดพลาดที่ไม่คาดคิด
วิธีแก้: ตรวจสอบบันทึกของเซิร์ฟเวอร์ แล้วเชื่อมต่อใหม่แบบเว้นระยะ
1012 Service Restart
เซิร์ฟเวอร์กำลังรีสตาร์ต
วิธีแก้: เชื่อมต่อใหม่หลังรอเวลาสั้นๆ แบบสุ่ม
1013 Try Again Later
เซิร์ฟเวอร์รับภาระเกินในตอนนี้
วิธีแก้: เชื่อมต่อใหม่แบบเว้นระยะ
1014 Bad Gateway
เกตเวย์หรือพร็อกซีได้รับคำตอบที่ไม่ถูกต้องจากเซิร์ฟเวอร์ด้านหลัง
วิธีแก้: ตรวจสอบเซิร์ฟเวอร์ที่อยู่หลังพร็อกซี
1015 TLS Handshake
TLS handshake ล้มเหลว เช่น ใบรับรองที่ไคลเอนต์ไม่เชื่อถือ เบราว์เซอร์รายงานค่านี้ แต่ไม่มีการส่งจริง
วิธีแก้: ตรวจสอบลำดับใบรับรอง ชื่อโฮสต์ และวันหมดอายุ
ช่วงของรหัส
- 1000–2999: สงวนไว้สำหรับมาตรฐาน WebSocket รหัสนี้ยังไม่ได้กำหนด
- 3000–3999: สงวนให้ไลบรารีและเฟรมเวิร์กลงทะเบียน ดูเอกสารของตัวที่คุณใช้
- 4000–4099: ข้อผิดพลาด Pusher ที่หลังจากนั้นไคลเอนต์จะไม่เชื่อมต่อใหม่ด้วยการตั้งค่าเดิม
- 4100–4199: ข้อผิดพลาด Pusher ที่หลังจากนั้นไคลเอนต์จะเชื่อมต่อใหม่แบบเว้นระยะ
- 4200–4299: ข้อผิดพลาด Pusher ที่หลังจากนั้นไคลเอนต์จะเชื่อมต่อใหม่ทันที
- 4300–4399: ข้อผิดพลาด Pusher ที่การเชื่อมต่อยังเปิดอยู่
- 4000–4999: สำหรับใช้งานส่วนตัว แอปหรือบริการที่ส่งเป็นผู้กำหนดความหมาย
ข้อผิดพลาดในการสมัครรับช่อง
การสมัครรับช่อง private หรือ presence ที่ล้มเหลวจะไม่ปิดการเชื่อมต่อ ไคลเอนต์จะได้รับ pusher:subscription_error แทน AuthError ในนั้นแทบทุกครั้งหมายความว่าลายเซ็นจาก auth endpoint ไม่ตรงกัน เพราะ secret, socket ID, ชื่อช่อง หรือ channel_data ต่างจากตอนที่ลงชื่อ
ทดสอบการเชื่อมต่อด้วยตัวทดสอบ WebSocket → · ขนาดข้อความและข้อจำกัดอื่นๆ →