12/04/2026 18:17น.

EP.61 การสร้างระบบการจัดการห้องแชท (Chat Room Management) ใน WebSocket
#WebSocket chat rooms
#Chat room management WebSocket
#Multi-user WebSocket chat
#Real-time group messaging
#WebSocket app development
#Go
ระบบ การจัดการห้องแชท ใน WebSocket ช่วยให้ผู้ใช้สามารถสร้างห้องแชท, เข้าร่วม, และจัดการห้องแชทในแบบเรียลไทม์ ฟีเจอร์นี้ช่วยให้การจัดระเบียบการสนทนาภายในห้องแชทเป็นไปอย่างมีประสิทธิภาพ โดยผู้ใช้สามารถควบคุมสมาชิกในห้องแชท และส่งข้อความได้ทันทีผ่าน WebSocket
ทำไมต้องมีระบบการจัดการห้องแชท (Chat Room Management)?
ระบบ การจัดการห้องแชท เป็นสิ่งจำเป็นสำหรับแอปพลิเคชันที่ต้องการจัดการการสนทนาในห้องแชทที่มีหลายผู้ใช้ โดยผู้ใช้สามารถ:
- สร้างและจัดการห้องแชท: ผู้ใช้สามารถสร้างห้องแชทใหม่และเชิญผู้ใช้อื่นเข้าร่วมได้
- จัดระเบียบการสนทนา: ห้องแชทช่วยให้การสนทนามีระเบียบและสามารถโฟกัสที่หัวข้อเฉพาะ
- ควบคุมการเข้าร่วม: ผู้ดูแลห้องแชทสามารถควบคุมว่าใครสามารถเข้าร่วมได้
- ควบคุมสมาชิกในห้อง: ผู้ดูแลสามารถจัดการการส่งข้อความและลบสมาชิกออกจากห้องได้
ข้อดีของการจัดการห้องแชท:
- การจัดระเบียบการสนทนา: การแยกการสนทนาเป็นห้องแชททำให้สามารถติดตามหัวข้อที่เกี่ยวข้องได้ง่าย
- การควบคุมการเข้าถึง: ผู้ดูแลสามารถจัดการสมาชิกในห้องแชทได้ตามต้องการ
- การควบคุมเนื้อหาที่ส่ง: ผู้ดูแลสามารถจัดการและควบคุมเนื้อหาที่ถูกโพสต์ในห้องได้
โครงสร้างของระบบการจัดการห้องแชท
ระบบ การจัดการห้องแชท จะช่วยให้ผู้ใช้สามารถสร้าง, เข้าร่วม, และจัดการการสนทนาในห้องแชทได้อย่างมีประสิทธิภาพ และสามารถจัดการสมาชิกในห้องแชทได้
ส่วนประกอบของระบบการจัดการห้องแชท:
- การสร้างห้องแชท: ผู้ใช้สามารถสร้างห้องแชทและตั้งชื่อห้องได้
- การเข้าร่วมและออกจากห้องแชท: ผู้ใช้สามารถเข้าร่วมและออกจากห้องแชทได้
- การจัดการสมาชิกในห้องแชท: ผู้ดูแลสามารถเพิ่มและลบสมาชิกจากห้องแชทได้
- การส่งข้อความในห้องแชท: ข้อความที่ผู้ใช้ส่งจะถูกส่งไปยังทุกคนในห้องแชททันที
- การตั้งค่าความเป็นส่วนตัวของห้องแชท: เช่น การตั้งค่าสำหรับห้องแชทแบบสาธารณะ, ส่วนตัว, หรือจำกัดการเข้าถึง
วิธีการสร้างระบบการจัดการห้องแชทใน WebSocket
การสร้างฟีเจอร์การจัดการห้องแชทใน WebSocket ต้องมีการอัปเดตเซิร์ฟเวอร์ WebSocket เพื่อรองรับการสร้างห้องแชท, การเพิ่มสมาชิก, การลบสมาชิก และการส่งข้อความในห้องแชท
ขั้นตอนที่ต้องทำ:
- การสร้างห้องแชท:
ผู้ใช้สามารถสร้างห้องแชทใหม่ได้ โดยต้องมีตัวระบุห้องและคุณสมบัติต่างๆ เช่น ชื่อห้อง, ประเภทห้อง, จำนวนผู้เข้าร่วมสูงสุด - การเข้าร่วมและออกจากห้องแชท:
ผู้ใช้สามารถเข้าร่วมและออกจากห้องแชทได้ เมื่อเข้าร่วม พวกเขาจะได้รับการอัปเดตข้อมูลจากห้องแชทนั้นๆ - การจัดการสมาชิกในห้องแชท:
ผู้ดูแลห้องแชทสามารถเพิ่มและลบสมาชิกจากห้องแชทได้ตามต้องการ - การส่งข้อความในห้องแชท:
ข้อความที่ส่งในห้องแชทจะถูกส่งไปยังสมาชิกทุกคนในห้องทันที
การสร้าง UI สำหรับการจัดการห้องแชท
ส่วนของ UI จะช่วยให้ผู้ใช้สามารถเห็นและจัดการห้องแชทได้ง่ายขึ้น โดยมีฟังก์ชันต่างๆ เช่น การแสดงรายชื่อห้องแชท, การเข้าร่วม, และการออกจากห้องแชท
ส่วนประกอบของ UI:
- แสดงรายชื่อห้องแชท: แสดงห้องแชททั้งหมดที่ผู้ใช้สามารถเข้าร่วม
- ปุ่มสร้างห้องแชท: ผู้ใช้สามารถสร้างห้องแชทใหม่ได้จาก UI
- ปุ่มเข้าร่วม/ออกจากห้องแชท: ผู้ใช้สามารถเข้าร่วมและออกจากห้องแชทจาก UI
- การตั้งค่าห้องแชท: ผู้ดูแลห้องแชทสามารถตั้งค่าได้ เช่น การลบสมาชิก, การปิดห้องแชท
การทดสอบฟีเจอร์การจัดการห้องแชท
หลังจากการพัฒนาและเพิ่มฟีเจอร์การจัดการห้องแชทแล้ว การทดสอบระบบจะช่วยให้มั่นใจว่าแอปพลิเคชันทำงานได้ตามที่ต้องการ
การทดสอบที่ควรทำ:
- ทดสอบการสร้างห้องแชท: ตรวจสอบว่าผู้ใช้สามารถสร้างห้องแชทได้
- ทดสอบการส่งข้อความในห้องแชท: ตรวจสอบว่าข้อความที่ผู้ใช้ส่งในห้องแชทจะถูกส่งไปยังทุกคนในห้อง
- ทดสอบการเข้าร่วมและออกจากห้องแชท: ตรวจสอบว่าเมื่อผู้ใช้เข้าร่วมและออกจากห้องแชท ระบบจะอัปเดตข้อมูลอย่างถูกต้อง
ตัวอย่างโค้ดสำหรับการจัดการห้องแชท (Chat Room Management)
โค้ด WebSocket Server (Backend)
โค้ดนี้จะช่วยให้ผู้ใช้สร้างห้องแชท, เพิ่มสมาชิก, และส่งข้อความในห้องแชท
package main
import (
"github.com/gorilla/websocket"
"fmt"
"net/http"
"sync"
)
var (
clients = make(map[*websocket.Conn]string) // map WebSocket connection to room
rooms = make(map[string][]*websocket.Conn) // map room name to connections
broadcast = make(chan string)
mu sync.Mutex
)
func handleChatRoom(w http.ResponseWriter, r *http.Request) {
conn, _ := upgrader.Upgrade(w, r, nil)
defer conn.Close()
room := r.URL.Query().Get("room") // Get room name from URL
clients[conn] = room
rooms[room] = append(rooms[room], conn)
for {
var message string
err := conn.ReadMessage(&message)
if err != nil {
delete(clients, conn)
break
}
// Broadcast message to all clients in the same room
mu.Lock()
for _, client := range rooms[room] {
client.WriteMessage(message)
}
mu.Unlock()
}
}
func main() {
http.HandleFunc("/ws", handleChatRoom)
fmt.Println("WebSocket Server Running on Port 8080")
http.ListenAndServe(":8080", nil)
}
โค้ด Frontend (Client)
การเชื่อมต่อ WebSocket และการแสดงข้อความในห้องแชท
const socket = new WebSocket("ws://localhost:8080/ws?room=group1");
const chatContainer = document.getElementById("chat-container");
socket.onmessage = (event) => {
const messageElement = document.createElement("p");
messageElement.innerText = event.data;
chatContainer.appendChild(messageElement);
};
function sendMessage(message) {
socket.send(message);
}
ท้าให้ลอง!
ลองเพิ่ม เครื่องมือการจัดการห้องแชท เพื่อให้ผู้ดูแลห้องสามารถมอบสิทธิ์ต่างๆ ให้กับสมาชิกในห้องได้!
EP ถัดไป:
ใน EP.62 เราจะมาดู การใช้ Context ใน Golang เพื่อจัดการกับการทำงานที่มีการรอคอย เพื่อให้สามารถควบคุมและจัดการกับการทำงานที่มีการรอคอย (concurrent tasks) ใน Golang ได้อย่างมีประสิทธิภาพ!