← เครื่องมือฟรี

รหัสปิด 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 → · ขนาดข้อความและข้อจำกัดอื่นๆ →