×

Tạo hệ thống chat đơn giản với WebSocket trong Java

Giao tiếp thời gian thực là yêu cầu ngày càng phổ biến trong các ứng dụng web hiện nay, từ trò chuyện trực tiếp đến các ứng dụng game online. Để triển khai một hệ thống như vậy, WebSocket là một lựa chọn tuyệt vời nhờ vào tính năng truyền dữ liệu hai chiều và hiệu suất cao. Dưới đây là hướng dẫn chi tiết về cách tạo hệ thống chat đơn giản sử dụng WebSocket trong Java.

Thiết lập dự án Maven

Đầu tiên, bạn cần tạo một dự án Maven mới và thêm các dependency cần thiết vào file pom.xml:

<dependencies>
    <dependency>
        <groupId>javax.websocket</groupId>
        <artifactId>javax.websocket-api</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.tyrus</groupId>
        <artifactId>tyrus-server</artifactId>
        <version>1.13</version>
    </dependency>
</dependencies>

Tạo lớp ChatServerEndpoint

Đây là lớp chính điều khiển kết nối WebSocket và xử lý các tin nhắn từ khách hàng:

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@ServerEndpoint("/chat")
public class ChatServerEndpoint {
    
    private static List<Session> clients = new ArrayList<>();

    @OnOpen
    public void onOpen(Session session) {
        clients.add(session);
    }

    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        for (Session client : clients) {
            if (!client.equals(session)) {
                client.getBasicRemote().sendText(message);
            }
        }
    }

    @OnClose
    public void onClose(Session session) {
        clients.remove(session);
    }
}

Khởi động máy chủ WebSocket

Tạo một lớp để khởi động máy chủ WebSocket:

import org.glassfish.tyrus.server.Server;

public class ChatServer {

    public static void main(String[] args) {
        Server server = new Server("localhost", 8025, "/websockets", ChatServerEndpoint.class);

        try {
            server.start();
            System.out.println("Press any key to stop the server...");
            System.in.read();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            server.stop();
        }
    }
}

Tạo trang HTML để khách hàng kết nối

Tạo file index.html để khách hàng có thể kết nối và giao tiếp:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Chat</title>
</head>
<body>
    <h2>WebSocket Chat</h2>
    <div id="messages"></div>
    <input type="text" id="messageInput" placeholder="Enter message">
    <button onclick="sendMessage()">Send</button>

    <script type="text/javascript">
        var ws = new WebSocket("ws://localhost:8025/websockets/chat");

        ws.onmessage = function(event) {
            var messages = document.getElementById('messages');
            var message = document.createElement('div');
            message.textContent = event.data;
            messages.appendChild(message);
        };

        function sendMessage() {
            var input = document.getElementById('messageInput');
            ws.send(input.value);
            input.value = '';
        }
    </script>
</body>
</html>

Chạy hệ thống chat

Bây giờ, bạn chỉ cần chạy lớp ChatServer và mở trình duyệt để truy cập vào file index.html. Nhập tin nhắn vào ô nhập liệu và nhấn nút "Send" để gửi tin nhắn. Bạn cũng có thể mở nhiều tab hoặc trình duyệt khác nhau để kiểm tra tính năng thời gian thực của hệ thống chat.

Kết luận

Qua các bước trên, bạn đã triển khai thành công một hệ thống chat đơn giản bằng cách sử dụng WebSocket trong Java. Để mở rộng ứng dụng này, bạn có thể thêm các tính năng như quản lý người dùng, lịch sử trò chuyện, và bảo mật. WebSocket không chỉ giới hạn trong việc tạo ra chat, mà còn có thể được áp dụng trong nhiều trường hợp khác như ứng dụng game, hệ thống theo dõi trực tiếp, và nhiều hơn nữa.

Comments