การดู : 0

12/04/2026 18:18น.

EP.56 การเพิ่มฟีเจอร์การบันทึกประวัติการสนทนาใน WebSocket Chat

EP.56 การเพิ่มฟีเจอร์การบันทึกประวัติการสนทนาใน WebSocket Chat

#โปรแกรมมิ่ง

#Go

#WebSocket Server

#message storage

#real-time notifications

#การพัฒนาแอปพลิเคชันแชท

#ฟีเจอร์ WebSocket

#real-time chat history

#Message History

#WebSocket chat history

ฟีเจอร์การบันทึกประวัติการสนทนาใน WebSocket Chat ช่วยให้ผู้ใช้สามารถเข้าถึงประวัติการสนทนาได้หลังจากการแชทเสร็จสิ้น ซึ่งมีประโยชน์ในการตรวจสอบข้อมูลที่ถูกพูดถึงหรือใช้สำหรับการสืบค้นข้อมูลที่สำคัญในภายหลัง

 

ทำไมต้องมีฟีเจอร์การบันทึกประวัติการสนทนา?

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

ข้อดีของการบันทึกประวัติการสนทนา:

  • เก็บข้อมูลที่สำคัญ: ฟีเจอร์นี้ช่วยให้ข้อมูลการสนทนาที่สำคัญสามารถเก็บไว้ได้และค้นหาได้ง่าย
  • ช่วยให้สามารถตรวจสอบหรือย้อนกลับไปดูข้อมูลในอนาคต: หากผู้ใช้ต้องการย้อนกลับไปอ่านประวัติการสนทนา ก็สามารถทำได้ง่าย
  • ช่วยในการจัดการข้อมูล: การเก็บบันทึกการสนทนาช่วยให้การจัดการข้อมูลในระบบเป็นระเบียบและมีประสิทธิภาพมากขึ้น

 

โครงสร้างของฟีเจอร์การบันทึกประวัติการสนทนาใน WebSocket Chat

การบันทึกประวัติการสนทนาใน WebSocket Chat จำเป็นต้องใช้โครงสร้างที่สามารถเก็บข้อมูลทั้งหมดของการสนทนาในฐานข้อมูล และสามารถดึงข้อมูลนี้มาแสดงให้ผู้ใช้ในภายหลังได้

ส่วนประกอบหลักของระบบการบันทึกประวัติการสนทนา:

  • การเก็บข้อมูลในฐานข้อมูล: ข้อความที่ถูกส่งในห้องแชทจะถูกเก็บในฐานข้อมูลเพื่อให้สามารถเรียกดูได้ในภายหลัง
  • การจัดการข้อมูลด้วยการดึงข้อมูล (Querying): เราจะต้องสามารถดึงข้อมูลการสนทนาจากฐานข้อมูลโดยการใช้งาน SQL Queries หรือ ORM (Object-Relational Mapping)
  • การแสดงข้อมูลใน UI: ข้อมูลการสนทนาจะถูกแสดงใน UI ของแอปพลิเคชันเพื่อให้ผู้ใช้สามารถดูประวัติการสนทนาได้

 

วิธีการเพิ่มฟีเจอร์การบันทึกประวัติการสนทนาใน WebSocket Server

การอัปเดต WebSocket Server เพื่อรองรับฟีเจอร์การบันทึกประวัติการสนทนาและบันทึกข้อความทุกข้อความที่ถูกส่งไปในห้องแชท

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

  • การอัปเดต WebSocket Server เพื่อรองรับการบันทึกประวัติการสนทนา: เซิร์ฟเวอร์จะต้องสามารถบันทึกข้อความที่ส่งจากผู้ใช้และจัดเก็บลงในฐานข้อมูล
  • การอัปเดตฐานข้อมูล: เราจะเพิ่มตารางสำหรับเก็บข้อความทั้งหมดที่ถูกส่งในห้องแชท โดยเก็บข้อมูลต่างๆ เช่น ผู้ส่งข้อความ, เนื้อหาข้อความ, เวลา และสถานะการส่งข้อความ
  • การส่งข้อมูลการบันทึกไปยังผู้ใช้: เมื่อมีการบันทึกข้อความใหม่ในห้องแชท ระบบจะต้องแจ้งให้ผู้ใช้ที่เชื่อมต่อได้ทราบ

 

การสร้าง UI ให้ผู้ใช้สามารถดูประวัติการสนทนา

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

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

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

 

การทดสอบฟีเจอร์การบันทึกประวัติการสนทนา

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

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

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

 

ตัวอย่างโค้ดสำหรับการบันทึกประวัติการสนทนาใน WebSocket Chat

  1. การอัปเดตฐานข้อมูล (Database)

เพิ่มตาราง chat_history ในฐานข้อมูลเพื่อเก็บประวัติการสนทนา

CREATE TABLE chat_history (
    id SERIAL PRIMARY KEY,
    sender VARCHAR(255),
    content TEXT,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  1. โค้ดใน WebSocket Server (Backend)

อัปเดต WebSocket Server เพื่อบันทึกข้อความที่ส่งในห้องแชท

package main

import (
    "database/sql"
    "encoding/json"
    "fmt"
    "net/http"
    "sync"

    "github.com/gorilla/websocket"
    _ "github.com/lib/pq"
)

type ChatMessage struct {
    Sender  string `json:"sender"`
    Content string `json:"content"`
}

var (
    clients   = make(map[*websocket.Conn]bool)
    broadcast = make(chan ChatMessage)
    mu        sync.Mutex
    db        *sql.DB
)

func handleChat(w http.ResponseWriter, r *http.Request) {
    conn, _ := upgrader.Upgrade(w, r, nil)
    defer conn.Close()
    clients[conn] = true

    for {
        var message ChatMessage
        err := conn.ReadJSON(&message)
        if err != nil {
            delete(clients, conn)
            break
        }

        // บันทึกข้อความลงในฐานข้อมูล
        _, err = db.Exec("INSERT INTO chat_history (sender, content) VALUES ($1, $2)", message.Sender, message.Content)
        if err == nil {
            broadcast <- message
        }
    }
}

func notifyClients() {
    for {
        msg := <-broadcast
        for client := range clients {
            err := client.WriteJSON(msg)
            if err != nil {
                client.Close()
                delete(clients, client)
            }
        }
    }
}

func main() {
    http.HandleFunc("/ws", handleChat)
    go notifyClients()
    fmt.Println("WebSocket Server Running on Port 8080")
    http.ListenAndServe(":8080", nil)
}
  1. โค้ดใน Frontend (Client)

เพิ่มฟีเจอร์ในการแสดงประวัติการสนทนาใน UI

const socket = new WebSocket("ws://localhost:8080/ws");
const chatContainer = document.getElementById("chat-container");

socket.onmessage = (event) => {
    const data = JSON.parse(event.data);
    const messageElement = document.createElement("p");
    messageElement.innerText = `${data.sender}: ${data.content}`;
    chatContainer.appendChild(messageElement);
};

function displayHistory() {
    fetch('/history')
        .then(response => response.json())
        .then(messages => {
            messages.forEach(msg => {
                const messageElement = document.createElement("p");
                messageElement.innerText = `${msg.sender}: ${msg.content}`;
                chatContainer.appendChild(messageElement);
            });
        });
}

 


 

ท้าให้ลอง!

ลองเพิ่มฟีเจอร์ การกรองประวัติการสนทนา เพื่อให้ผู้ใช้สามารถค้นหาข้อความสำคัญในประวัติการสนทนาได้อย่างรวดเร็ว!

 

EP ถัดไป:
ใน EP ถัดไป เราจะมาดู การเพิ่มฟีเจอร์การควบคุมการเข้าถึงห้องแชท (Access Control) เพื่อให้ผู้ดูแลสามารถควบคุมการเข้าถึงห้องแชทได้!