[อัปเดต]จากที่เคยมาขอคำแนะนำเรื่อง Security เว็บแชทนิรนาม วันนี้ผมรื้อสถาปัตยกรรมใหม่และทำระบบเสร็จสมบูรณ์แล้วครับ


สวัสดีครับพี่ๆ จำนักศึกษาที่เคยมาตั้งกระทู้แชร์โปรเจกต์ทำเว็บแชทระบายความเครียดแบบไม่ระบุตัวตนเมื่อช่วงก่อนได้ไหมครับ หัวเราะ
ตอนนั้นผมเพิ่งทำระบบเบื้องต้นเสร็จ มีแค่ระบบแยกบทบาทผู้ระบายกับผู้รับฟัง และทำฟีเจอร์ Reconnect กันเน็ตหลุด วันนั้นได้ฟีดแบ็กเรื่องระบบและแนวคิดดีๆ กลับไปเยอะมากครับ

วันนี้ผมเลยอยากมาอัปเดตว่าโปรเจกต์เว็บ Soulis ของผม พัฒนาต่อยอดจนเป็น Production-ready แบบเต็มรูปแบบแล้วครับ
ช่วงที่ผ่านมาผมเจอปัญหาตอนเทสต์ระบบเวลาคนเข้าพร้อมกันเยอะๆ เลยกลับไปรื้อและปรับปรุงโครงสร้างเชิงเทคนิคใหม่หลายจุดเลยครับ สิ่งที่อัปเดตและอยากให้พี่ๆ ลองเข้ามาเทสต์ดูมีประมาณนี้ครับ

- การจัดการคิวและฐานข้อมูล ผมเจอปัญหา Race Conditions ตอนคนแย่งคิวกัน เลยปรับระบบคิวใหม่โดยใช้เปลี่ยนฟังก์ชันจับคู่ร่วมกับคำสั่ง FOR UPDATE SKIP LOCKED ในระดับฐานข้อมูลครับทีนี้ต่อให้คนใช้งานหนาแน่นแค่ไหนระบบก็จับคู่ได้ไม่ชนกันแล้วครับ
- เรื่องความหน่วงและประสิทธิภาพ ผมเปลี่ยนมาใช้ React Vite กับ TailwindCSS และใช้ Supabase จัดการเรื่อง Realtime Channel ทำให้ส่งข้อความได้ลื่นไหลไม่มีความหน่วงครับแถมผมยังทำเป็น PWA ให้มันอัปเดตเวอร์ชันใหม่เป็นแบคกราวด์ได้เลย โดยที่แอปไม่ค้างและไม่เตะคนออกจากห้องแชทด้วยครับ
- การแก้ปัญหา Ghost Room เวลาเน็ตหลุด ผมใช้เทคนิค SessionStorage ในการจดจำห้องแชทครับถ้าสลับแอปหรือเน็ตหลุดก็ยังกลับเข้าห้องเดิมได้แบบไร้รอยต่อครับ
- ความปลอดภัยและสิทธิความเป็นส่วนตัว ผมตั้งค่ากฎ Database พวก RLS และ Foreign Keys ไว้อย่างรัดกุมครับถ้าผู้ใช้ต้องการลบบัญชี ระบบจะสั่งทำ ON DELETE CASCADE ลบข้อมูลทุกอย่างแบบลูกโซ่ ล้างประวัติแชทและคิวทิ้งทั้งหมดแบบหมดจดเพื่อรับประกันสิทธิความเป็นส่วนตัวครับ

นอกจากระบบแชทแล้ว ตอนนี้ผมยังเขียนระบบกระดานข้อความ ระบบส่งจดหมายนิรนาม และสมุดบันทึกส่วนรวมเพิ่มเข้ามาด้วยครับ
ใครที่เป็นสาย Techอยากลองเข้ามาเทสต์ระบบ ลองจับผิดสถาปัตยกรรม หรือจะมาเทสต์หาบั๊ก แวะเข้าไปได้เลยครับ
พิกัดเว็บครับ: https://soulis.in.th

ลองเล่นแล้วเจอจุดบกพร่องตรงไหน หรือมีจุดไหนควรระวังเรื่อง Security เพิ่มเติม คอมเมนต์ชี้แนะได้เต็มที่เหมือนเดิมนะครับ ขอบคุณพี่ๆ ทุกคนที่คอยให้คำแนะนำครับ💜 หัวเราะ
แก้ไขข้อความเมื่อ

แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่