ข้ามไปที่เนื้อหาหลัก

เรื่องที่แนะนำ

คู่มือ Java ฉบับทันสมัย (อัปเดตล่าสุดปี 2025)

 คู่มือ Java ฉบับทันสมัย (อัปเดตล่าสุดปี 2025) บทนำ Java ยังคงเป็นภาษายอดนิยมที่ได้รับความนิยมอย่างต่อเนื่องตั้งแต่ยุค 1990 จนถึงปัจจุบัน ในปี 2025 Java ได้ก้าวหน้าอย่างมากทั้งด้านภาษาหลักและเครื่องมือสนับสนุน ล่าสุด Java 24 ได้เปิดตัวออกมาแล้ว และ Java 21 เป็นเวอร์ชัน LTS (Long-Term Support) ที่แนะนำให้ใช้งานสำหรับระบบจริงในระยะยาว บทความนี้จะช่วยให้คุณเข้าใจภาพรวมของ Java เวอร์ชันล่าสุด รวมถึงฟีเจอร์เด่น โครงสร้างภาษาที่ควรรู้ และแนวทางการพัฒนา Java ยุคใหม่ ภาพรวมเวอร์ชัน Java ล่าสุด เวอร์ชัน สถานะ วันเปิดตัว Java 24 เวอร์ชันล่าสุด มีนาคม 2025 Java 21 เวอร์ชัน LTS ล่าสุด กันยายน 2023 Java 17 LTS รุ่นก่อนหน้า กันยายน 2021 Java 11 LTS เก่า กันยายน 2018 โครงสร้างพื้นฐานของภาษา Java คลาสและอ็อบเจกต์ : โครงสร้างหลักของโปรแกรม Java Primitive Types : int, double, char, boolean เป็นต้น Control Statements : if, switch, while, for, do-while Methods : การแยกโค้ดเป็นหน่วยที่นำกลับมาใช้ซ้ำได้ Array และ Collection : จัดเก็บและจัดการข้อมูลหลายรายการ Exception Handling : try-catch-finally OOP Co...

สอนสร้างแอปพลิเคชันแชทแบบง่ายด้วย Spring Boot และ WebSocket

ในบทความนี้ เราจะสร้างแอปพลิเคชันแชทแบบง่ายที่ให้ผู้ใช้สามารถลงชื่อเข้าใช้งาน (Sign In) เข้าร่วมห้อง (Join Room) สร้างห้อง (Create Room) ส่งข้อความสาธารณะในห้อง (Public Chat) และส่งข้อความส่วนตัวระหว่างผู้ใช้ (Private Chat) โดยใช้ Spring Boot และ WebSocket


1. การตั้งค่าเซิร์ฟเวอร์ด้วย Spring Boot

แอปพลิเคชันของเราประกอบด้วย:

  1. WebSocket สำหรับการส่งข้อความแบบเรียลไทม์
  2. REST API สำหรับการลงทะเบียนผู้ใช้และการจัดการห้องแชท

โค้ดหลัก

  • ตั้งค่า WebSocket ด้วย @EnableWebSocketMessageBroker และใช้ SockJS เพื่อรองรับ WebSocket Client
  • สร้าง REST Controller สำหรับการจัดการผู้ใช้และห้องแชท
  • ใช้ STOMP Protocol เพื่อจัดการข้อความในรูปแบบ Topic และ Queue

2. การสร้าง WebSocket Controller

  • ผู้ใช้สามารถส่งข้อความสาธารณะในห้องผ่าน Topic เช่น /topic/room/{roomName}
  • ข้อความส่วนตัวส่งถึงผู้ใช้โดยตรงผ่าน Queue เช่น /queue/private

ตัวอย่างโค้ด:

  • ฟังก์ชันสำหรับส่งข้อความในห้อง:

    @MessageMapping("/chat/public")
    public void publicChat(ChatRequest request) {
      Room room = rooms.get(request.getRoomName());
      if (room != null && room.getUsers().contains(request.getNickname())) {
          messagingTemplate.convertAndSend("/topic/room/" + request.getRoomName(),
                  new ChatMessage(request.getNickname(), request.getRoomName(), request.getMessage()));
      }
    }
    
  • ฟังก์ชันสำหรับข้อความส่วนตัว:

    @MessageMapping("/chat/private")
    public void privateChat(PrivateChatRequest request) {
      messagingTemplate.convertAndSendToUser(request.getReceiver(), "/queue/private",
                  new ChatMessage(request.getSender(), request.getReceiver(), request.getMessage()));
    }
    

3. การพัฒนาฝั่งไคลเอนต์ด้วย JavaScript

เราได้พัฒนา JavaScript Client อย่างง่ายเพื่อให้ผู้ใช้สามารถ:

  1. ลงชื่อเข้าใช้งานด้วยชื่อเล่น (Nickname)
  2. เข้าร่วมห้องหรือออกจากห้อง
  3. ส่งข้อความแบบเรียลไทม์

โครงสร้าง HTML:

<div>
    <label for="nickname">Nickname:</label>
    <input type="text" id="nickname">
</div>
<div>
    <label for="room">Room:</label>
    <input type="text" id="room">
</div>
<div>
    <button id="connect">Connect</button>
    <button id="disconnect">Disconnect</button>
</div>
<div>
    <textarea id="message" placeholder="Type your message"></textarea>
    <button id="send">Send</button>
</div>
<div id="messages"></div>

ฟังก์ชันการเชื่อมต่อ WebSocket:

document.getElementById('connect').addEventListener('click', () => {
    stompClient.connect({}, () => {
        const room = document.getElementById('room').value;
        stompClient.subscribe(`/topic/room/${room}`, (message) => {
            const data = JSON.parse(message.body);
            document.getElementById('messages').innerHTML += `<p>${data.sender}: ${data.message}</p>`;
        });
    });
});

4. การประกาศสถานะการเข้าร่วมห้องและออกจากห้อง

เมื่อผู้ใช้เข้าหรือออกจากห้อง เซิร์ฟเวอร์จะส่งข้อความระบบแจ้งให้ผู้ใช้ในห้องทราบ เช่น:

  • Alice joined the room.
  • Bob left the room.

ตัวอย่างโค้ด:

@PostMapping("/rooms/join")
public String joinRoom(@RequestBody JoinRoomRequest request) {
    Room room = rooms.get(request.getRoomName());
    room.addUser(request.getNickname());
    messagingTemplate.convertAndSend("/topic/room/" + request.getRoomName(),
            new SystemMessage(request.getNickname() + " joined the room."));
    return "Joined successfully";
}

5. สรุป

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

ลิงก์ที่เกี่ยวข้อง:

ความคิดเห็น

บทความที่ได้รับความนิยม