มาตรฐานการตั้งชื่อห้อง (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 ไม่ต้องลงทะเบียนตามเดิม):
- ต้องแนบลายเซ็น (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. ตัวอย่างชื่อที่ไม่ควรใช้
| ❌ แย่ | ✅ ดี | เหตุผล |
|---|---|---|
room45feed | updates:feed_45 | ขาด namespace |
btc_price | ticker:btc_usd | ไม่มีหมวดหมู่ |
notify_user992 | notifications:usr_992 | ย่อเกินไป |
