การดู : 0

12/04/2026 18:17น.

EP.61 การสร้างระบบการจัดการห้องแชท (Chat Room Management) ใน WebSocket

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 เพื่อรองรับการสร้างห้องแชท, การเพิ่มสมาชิก, การลบสมาชิก และการส่งข้อความในห้องแชท

ขั้นตอนที่ต้องทำ:

  1. การสร้างห้องแชท:
    ผู้ใช้สามารถสร้างห้องแชทใหม่ได้ โดยต้องมีตัวระบุห้องและคุณสมบัติต่างๆ เช่น ชื่อห้อง, ประเภทห้อง, จำนวนผู้เข้าร่วมสูงสุด
  2. การเข้าร่วมและออกจากห้องแชท:
    ผู้ใช้สามารถเข้าร่วมและออกจากห้องแชทได้ เมื่อเข้าร่วม พวกเขาจะได้รับการอัปเดตข้อมูลจากห้องแชทนั้นๆ
  3. การจัดการสมาชิกในห้องแชท:
    ผู้ดูแลห้องแชทสามารถเพิ่มและลบสมาชิกจากห้องแชทได้ตามต้องการ
  4. การส่งข้อความในห้องแชท:
    ข้อความที่ส่งในห้องแชทจะถูกส่งไปยังสมาชิกทุกคนในห้องทันที

 

การสร้าง UI สำหรับการจัดการห้องแชท

ส่วนของ UI จะช่วยให้ผู้ใช้สามารถเห็นและจัดการห้องแชทได้ง่ายขึ้น โดยมีฟังก์ชันต่างๆ เช่น การแสดงรายชื่อห้องแชท, การเข้าร่วม, และการออกจากห้องแชท

ส่วนประกอบของ UI:

  • แสดงรายชื่อห้องแชท: แสดงห้องแชททั้งหมดที่ผู้ใช้สามารถเข้าร่วม
  • ปุ่มสร้างห้องแชท: ผู้ใช้สามารถสร้างห้องแชทใหม่ได้จาก UI
  • ปุ่มเข้าร่วม/ออกจากห้องแชท: ผู้ใช้สามารถเข้าร่วมและออกจากห้องแชทจาก UI
  • การตั้งค่าห้องแชท: ผู้ดูแลห้องแชทสามารถตั้งค่าได้ เช่น การลบสมาชิก, การปิดห้องแชท

 

การทดสอบฟีเจอร์การจัดการห้องแชท

หลังจากการพัฒนาและเพิ่มฟีเจอร์การจัดการห้องแชทแล้ว การทดสอบระบบจะช่วยให้มั่นใจว่าแอปพลิเคชันทำงานได้ตามที่ต้องการ

การทดสอบที่ควรทำ:

  • ทดสอบการสร้างห้องแชท: ตรวจสอบว่าผู้ใช้สามารถสร้างห้องแชทได้
  • ทดสอบการส่งข้อความในห้องแชท: ตรวจสอบว่าข้อความที่ผู้ใช้ส่งในห้องแชทจะถูกส่งไปยังทุกคนในห้อง
  • ทดสอบการเข้าร่วมและออกจากห้องแชท: ตรวจสอบว่าเมื่อผู้ใช้เข้าร่วมและออกจากห้องแชท ระบบจะอัปเดตข้อมูลอย่างถูกต้อง

 

ตัวอย่างโค้ดสำหรับการจัดการห้องแชท (Chat Room Management)

  1. โค้ด 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)
}
  1. โค้ด 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 ได้อย่างมีประสิทธิภาพ!