Skip to content

มาตรฐานการตั้งชื่อห้อง (Channel Naming)

แม้ระบบจะไม่บังคับอย่างเข้มงวดว่า "ต้องตั้งชื่อห้องยังไง" แต่ถ้าทีมพัฒนาร่วมตกลงบนพื้นฐานแบบแผน (Convention) เดียวกัน... นอกจากจะทำให้อ่านรหัสง่ายขึ้นเป็นกองแล้ว ยังช่วยประหยัดเวลาการแก้ไขปัญหาและแบ่งโซนระบบได้อย่างเป็นระเบียบสุดๆ

📏 1. กฏเกณฑ์ที่บังคับใช้ (Hard Rules)

  • ความยาวที่ยอมรับ: สูงสุดไม่เกิน 128 ตัวอักษร
  • รูปแบบอักขระ (Charset): a-z, A-Z, 0-9, เครื่องหมายลบ (-), เสนใต้ (_), จุด (.), โคลอน (:)

🧩 2. รูปแบบที่แนะนำ (Best Practices Pattern)

สูตร: [หมวดหมู่] : [เป้าหมาย]

ตัวอย่าง Public Channels

  • 🟢 updates:feed_45 — ข่าวสารอัปเดต
  • 🟢 price_ticker:btc_usd — ราคาสินค้า
  • 🟢 notifications:usr_992 — การแจ้งเตือน
  • 🟢 game:lobby_alpha — ห้อง game lobby
  • 🟢 iot:sensor_temp_001 — ข้อมูล IoT

ตัวอย่าง Private Channels

  • 🟢 private:orders_usr_123 — ออเดอร์ส่วนตัว
  • 🟢 private:dashboard_admin — ข้อมูลผู้ดูแลระบบ
  • 🟢 private:wallet_usr_abc — ยอดเงินคงเหลือ

🔐 3. ห้องแบบ Private

ห้องที่ชื่อขึ้นต้นด้วย private: จะถูกป้องกันเพิ่มเติม (แต่ยังคงความเป็น Dynamic ไม่ต้องลงทะเบียนตามเดิม):

  1. ต้องแนบลายเซ็น (Channel Auth Signature) จาก Backend ของคุณตอน Subscribe
javascript
// 1. ขอลายเซ็นจาก Backend ของคุณ
const { sig } = await fetch('/api/channel-auth', {
  method: 'POST',
  body: JSON.stringify({ channel: 'private:orders_usr_123', user_id: myUserId }),
  headers: { 'Content-Type': 'application/json' },
}).then(r => r.json());

// 2. Subscribe พร้อมลายเซ็น
ws.send(JSON.stringify({
  cmd: "subscribe",
  channel: "private:orders_usr_123",
  auth: { sig },
  ref: "sub-private"
}));

Backend ของคุณเซ็นยังไง?

HMAC-SHA256(secret_key, "private:orders_usr_123:user_abc")

💡 ข้อสำคัญ: ห้องที่ ไม่ได้ ขึ้นต้นด้วย private: จะถือเป็น Public Channel โดยอัตโนมัติ — ไม่ต้องใช้ Signature ตรวจสอบใดๆ, Subscribe ได้ทันที!


🚫 4. ตัวอย่างชื่อที่ไม่ควรใช้

❌ แย่✅ ดีเหตุผล
room45feedupdates:feed_45ขาด namespace
btc_priceticker:btc_usdไม่มีหมวดหมู่
notify_user992notifications:usr_992ย่อเกินไป

Released under the MIT License.