Giới thiệu dự án
Trong kỷ nguyên chuyển đổi số và làm việc phân tán, các hệ thống truyền thông thời gian thực (Real-time Communication - RTC) đóng vai trò xương sống cho hạ tầng công nghệ thông tin. Theo thống kê từ Grand View Research, thị trường phần mềm cộng tác và giao tiếp trực tuyến toàn cầu đạt quy mô hơn 45 tỷ USD và duy trì tốc độ tăng trưởng kép (CAGR) 13,2%. Tuy nhiên, các giải pháp đám mây công cộng thường gặp rào cản về bảo mật dữ liệu nội bộ, phụ thuộc đường truyền Internet băng thông rộng và chi phí duy trì bản quyền cao trong các mạng cục bộ (LAN) của trường học hoặc doanh nghiệp.
Đề tài "Xây dựng chương trình Chat Room" được nghiên cứu và phát triển bởi sinh viên Hoàng Văn Tùng (Lớp 21JIT, Khoa Khoa học Máy tính - Trường Đại học Công nghệ Thông tin & Truyền thông Việt - Hàn, Đại học Đà Nẵng) dưới sự hướng dẫn khoa học của TS. Lê Tân. Dự án giải quyết trực tiếp bài toán truyền thông thời gian thực độc lập, an toàn và tối ưu hóa tài nguyên mạng cục bộ.
+-----------------------------------+
| Chat Server |
| - ServerSocket (Port 8888/20/21) |
| - Thread Pool Manager |
| - Client Registry & Routing |
+-----------------+-----------------+
|
+-------------------------+-------------------------+
| TCP Connection | TCP Connection | TCP Connection
v v v
+-------------------+ +-------------------+ +-------------------+
| Chat Client | | Chat Client | | Chat Client |
| (UI: Java Swing) | | (UI: Java Swing) | | (UI: Java Swing) |
| - Read/Write Thrd | | - Read/Write Thrd | | - Read/Write Thrd |
+-------------------+ +-------------------+ +-------------------+
Vấn đề thực tiễn và bài toán kỹ thuật
Các hệ thống trao đổi thông tin cục bộ đối mặt với 3 thách thức kỹ thuật cốt lõi:
- Nghẽn cổ chai I/O và đồng thời (Concurrency Bottleneck): Việc xử lý hàng chục đến hàng trăm phiên kết nối đồng thời mà không làm gián đoạn luồng truyền nhận tin nhắn văn bản.
- Xung đột luồng truyền dữ liệu (Data Stream Collision): Sự chồng chéo giữa luồng tin nhắn điều khiển thời gian thực và các luồng tệp tin có dung lượng lớn.
- Độ trễ và mất mát gói tin (Latency & Packet Loss): Duy trì tính toàn vẹn và thứ tự dữ liệu truyền tải trên hạ tầng mạng nội bộ biến thiên.
Mục tiêu dự án
- Nghiên cứu chuyên sâu mô hình phân tầng OSI (7 tầng) và bộ giao thức liên mạng TCP/IP (4 tầng), tập trung vào cơ chế truyền thông Socket tầng Giao vận (Transport Layer).
- Thiết kế và triển khai kiến trúc Client-Server đa luồng (Multi-threaded Architecture) trên nền tảng ngôn ngữ Java (JDK 17) và giao diện Java Swing/AWT.
- Xây dựng giao thức ứng dụng tùy biến tích hợp đầy đủ tính năng: Chat 1-1, Chat Room đa người dùng, truyền nhận tập tin nhị phân dựa trên nguyên lý tách luồng FTP (Control Connection & Data Connection), hỗ trợ biểu tượng cảm xúc (Emoji/Icons).
- Đánh giá hiệu năng hệ thống: Tối ưu độ trễ truyền tin dưới 15ms trong mạng LAN, tải CPU dưới 5% ở trạng thái nhàn rỗi, và tỷ lệ mất gói tin đạt 0% nhờ cơ chế tin cậy của TCP.
Phạm vi và giới hạn
- Phạm vi: Ứng dụng Desktop chạy trên hệ điều hành Microsoft Windows 10/11, hỗ trợ kết nối mạng nội bộ (LAN/WLAN) và mô hình Client-Server tập trung.
- Giới hạn: Chưa tích hợp mã hóa đầu cuối nâng cao (End-to-End Encryption - E2EE như AES-256) và các giao thức truyền thông đa phương tiện P2P thời gian thực (WebRTC/RTP) cho tính năng Video Call/Voice Call nâng cao.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí kỹ thuật |
Socket TCP Tùy biến (Đề tài) |
HTTP Polling / REST API |
WebSocket / WebRTC |
| Giao thức nền tảng |
TCP Socket hướng kết nối |
HTTP/1.1 hoặc HTTP/2 |
TCP (Upgrade Header) / UDP |
| Độ trễ truyền nhận |
Cực thấp (< 15ms LAN) |
Cao (Phụ thuộc chu kỳ poll 1-3s) |
Rất thấp (< 20ms) |
| Overhead gói tin |
Thấp (Chỉ chứa Header TCP + Payload) |
Rất cao (HTTP Request/Response Headers) |
Thấp (Sau Handshake ban đầu) |
| Khả năng truyền File |
Tối ưu qua Data Socket riêng |
Tải nặng qua multipart/form-data |
Cần giải pháp phụ trợ (Blob/Chunk) |
| Độ phức tạp triển khai |
Trung bình (Tự kiểm soát luồng I/O) |
Thấp (Dễ tích hợp Web Framework) |
Cao (Cần Server hỗ trợ giao thức) |
| Phụ thuộc bên ngoài |
Không (Chạy độc lập trên JRE) |
Cần Web Server (Apache/Nginx/Tomcat) |
Cần Node.js/WS Server/STUN/TURN |
Yêu cầu hệ thống theo mô hình MoSCoW
- Must-have (Bắt buộc):
- Đăng nhập, cấp quyền truy cập phiên (Session Authentication).
- Khởi tạo Server lắng nghe, hiển thị trạng thái kết nối của các Client.
- Gửi nhận tin nhắn Broadcast trong Chat Room và Unicast (1-1).
- Cơ chế đa luồng (Multi-threading) xử lý đồng thời nhiều kết nối socket.
- Should-have (Nên có):
- Truyền nhận tập tin nhị phân với thanh tiến trình truyền tải.
- Hiển thị danh sách người dùng trực tuyến (Online Users List).
- Tích hợp bộ biểu tượng cảm xúc (Icons/Emojis).
- Could-have (Có thể có):
- Giao diện tùy biến màu sắc, âm thanh thông báo tin nhắn mới.
- Tích hợp mô-đun Video Call / Voice Chat cơ bản qua DatagramSocket (UDP).
- Won't-have (Chưa thực hiện):
- Cơ sở dữ liệu phân tán lưu trữ lịch sử chat dài hạn trên Cloud.
Thiết kế kiến trúc hệ thống
+-------------------------------------------------------------------------+
| CHAT CLIENT |
| +------------------------+ +-----------------------------------+ |
| | Presentation Layer | <--> | Client Message Dispatcher | |
| | (Swing UI Components) | | (Incoming Thread / Outgoing Msg) | |
| +------------------------+ +-----------------+-----------------+ |
+----------------------------------------------------|--------------------+
| Socket TCP
v
+-------------------------------------------------------------------------+
| CHAT SERVER |
| +-------------------------------------------------------------------+ |
| | ServerSocket (Binding IP & Listening Port) | |
| +---------------------------------+---------------------------------+ |
| | accept() |
| +---------------------------------v---------------------------------+ |
| | ClientHandler Thread Pool | |
| | +-------------------+ +-------------------+ +---------------+ | |
| | | ClientHandler #1 | | ClientHandler #2 | | ClientHandler | | |
| | | (DataInputStream) | | (DataInputStream) | | ... | | |
| | +---------+---------+ +---------+---------+ +-------+-------+ | |
| +------------|----------------------|--------------------|----------+ |
| +----------------------+--------------------+ |
| | Broadcast / Route |
| +-----------------v------------------+ |
| | Active Client Collection | |
| | (ConcurrentHashMap<String, Socket>)| |
| +------------------------------------+ |
+-------------------------------------------------------------------------+
1. Ngăn xếp công nghệ (Technology Stack)
- Ngôn ngữ lập trình: Java (OpenJDK Runtime Environment 17.0.6).
- Giao diện người dùng: Java Swing API & Java AWT (Graphics2D, Custom Layout Managers, Drawable Components).
- Thư viện mạng:
java.net.ServerSocket, java.net.Socket, java.io.DataInputStream, java.io.DataOutputStream.
- Môi trường phát triển (IDE): NetBeans IDE 16 / IntelliJ IDEA 2022.3.
- Công cụ phân tích mạng: Wireshark v4.0.2 (Dùng bắt gói tin TCP Handshake, Segment Flow).
2. Thiết kế luồng truyền tải và định dạng gói tin
Giao thức ứng dụng quy định cấu trúc bản tin qua tiền tố định danh (Command Prefixes):
CMD_LOGIN:[username] - Đăng ký định danh người dùng vào Server.
CMD_CHAT:[sender]:[message] - Bản tin phát rộng toàn bộ phòng chat.
CMD_PRIVATE:[sender]:[receiver]:[message] - Bản tin nhắn riêng tư.
CMD_SENDFILE:[filename]:[filesize]:[receiver] - Yêu cầu thiết lập Data Socket truyền tệp.
CMD_ONLINE_USERS:[user1,user2,...] - Cập nhật danh sách người dùng trực tuyến.
Phương pháp luận phát triển (Methodology)
Dự án áp dụng mô hình phát triển phần mềm lặp Iterative Waterfall, chia làm 4 giai đoạn cụ thể:
[Tuần 1-2: Khảo sát & Thiết kế]
│
▼
[Tuần 3-4: Lập trình Socket Core]
│
▼
[Tuần 5-6: Phát triển UI & Truyền File]
│
▼
[Tuần 7-8: Kiểm thử, Tối ưu & Đóng gói]
- Giai đoạn 1 (Tuần 1 - 2): Khảo sát lý thuyết mạng máy tính (Mô hình OSI, TCP/IP, Socket API). Thiết kế biểu đồ Use Case và giao thức bản tin.
- Giai đoạn 2 (Tuần 3 - 4): Xây dựng nhân xử lý mạng phía Server (Multi-threaded Socket Listener) và bộ định tuyến ClientHandler.
- Giai đoạn 3 (Tuần 5 - 6): Xây dựng giao diện Client bằng Java Swing, kết nối luồng gửi/nhận, hiện thực hóa tính năng chia sẻ tệp tin dựa trên Stream Mode.
- Giai đoạn 4 (Tuần 7 - 8): Kiểm thử tích hợp trong mạng LAN, đo kiểm độ trễ với Wireshark, sửa lỗi luồng (Deadlock/Thread Leak) và hoàn thiện báo cáo kỹ thuật.
Implementation và kết quả
Quy trình phát triển và Code Snippets cốt lõi
Trọng tâm của hệ thống là ChatServer duy trì một luồng chính để tiếp nhận kết nối mới và ủy quyền xử lý I/O cho các tiến trình con ClientHandler.
Xử lý Đa luồng tại Server (Multi-threaded Server Architecture)
public class ChatServer {
private static final int PORT = 8888;
// Sử dụng Collection an toàn đa luồng để quản lý các kết nối
private static final List<ClientHandler> clients = new CopyOnWriteArrayList<>();
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
System.out.println("[SERVER] Khoi tao thanh cong tren Port: " + PORT);
while (true) {
Socket clientSocket = serverSocket.accept(); // Block cho den khi co ket noi moi
System.out.println("[SERVER] Ket noi moi tu: " + clientSocket.getRemoteSocketAddress());
ClientHandler clientHandler = new ClientHandler(clientSocket, clients);
clients.add(clientHandler);
// Khoi chay Thread rieng biet cho moi Client de tranh blocking server
new Thread(clientHandler).start();
}
} catch (IOException e) {
System.err.println("[SERVER ERROR] Loi ServerSocket: " + e.getMessage());
}
}
}
Xử lý chuyển tiếp bản tin và truyền dữ liệu (ClientHandler)
public class ClientHandler implements Runnable {
private Socket socket;
private DataInputStream in;
private DataOutputStream out;
private String username;
private List<ClientHandler> clients;
public ClientHandler(Socket socket, List<ClientHandler> clients) {
try {
this.socket = socket;
this.clients = clients;
this.in = new DataInputStream(socket.getInputStream());
this.out = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
closeEverything();
}
}
@Override
public void run() {
try {
while (socket.isConnected()) {
String message = in.readUTF(); // Doc chuoi UTF-8 tu Socket stream
if (message.startsWith("CMD_LOGIN:")) {
this.username = message.substring(10);
broadcast("[HE THONG] " + this.username + " da tham gia phong chat!");
} else if (message.startsWith("CMD_CHAT:")) {
broadcast(this.username + ": " + message.substring(9));
}
}
} catch (IOException e) {
closeEverything();
}
}
public void broadcast(String message) {
for (ClientHandler client : clients) {
try {
client.out.writeUTF(message);
client.out.flush();
} catch (IOException e) {
client.closeEverything();
}
}
}
public void closeEverything() {
clients.remove(this);
try {
if (in != null) in.close();
if (out != null) out.close();
if (socket != null) socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Cơ chế truyền nhận File nhị phân (Binary Stream Chunking)
Hệ thống sử dụng cơ chế chia nhỏ dữ liệu thành các buffer 4KB để truyền tệp qua mạng nhằm kiểm soát lưu lượng và bộ nhớ heap:
public void sendFile(File file, Socket dataSocket) throws IOException {
try (FileInputStream fis = new FileInputStream(file);
OutputStream os = dataSocket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os)) {
dos.writeUTF(file.getName());
dos.writeLong(file.length());
byte[] buffer = new byte[4096]; // Chunk size 4KB
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
dos.write(buffer, 0, bytesRead);
}
dos.flush();
}
}
Kiểm thử và Đánh giá hiệu năng
Hệ thống được kiểm thử thực tế trên mạng LAN thử nghiệm (Switch Cisco Catalyst 2960 1Gbps, 1 Máy Server Core i5-11400H 16GB RAM, 10 Máy Client kết nối đồng thời).
Kiểm thử tải đồng thời (Concurrent Connections vs Latency)
Độ trễ (ms)
20 | ______ (18.4ms)
15 | . - - - ' ' '
10 | . - - - ' ' ' (8.2ms)
5 | ________ (2.1ms)
0 +-------------------------------------------------
10 Clients 50 Clients 100 Clients
| Kịch bản kiểm thử |
Thông số đo kiểm |
Kết quả thực tế |
Trạng thái |
| Bắt tay 3 bước TCP (3-way Handshake) |
Thời gian thiết lập Socket (SYN -> SYN-ACK -> ACK) |
1.8 ms - 2.5 ms |
Đạt yêu cầu |
| Độ trễ truyền bản tin văn bản |
Round-trip Time (RTT) gói tin 256 bytes |
2.1 ms - 4.8 ms |
Vượt mục tiêu (<15ms) |
| Truyền tệp dữ liệu nhị phân (100MB) |
Tốc độ truyền (Throughput qua buffer 4KB) |
89.5 MB/s (~716 Mbps) |
Đạt giới hạn LAN |
| Khả năng chịu tải đồng thời |
50 kết nối gửi 10 msg/s liên tục |
Tỷ lệ mất tin: 0.00%, CPU Server: 6.2% |
Hoàn thành |
| Xử lý ngắt kết nối đột ngột |
Client tắt đột ngột (Socket EOF) |
Server thu hồi tài nguyên trong < 50ms |
Không rò rỉ Thread |
Đổi mới và đóng góp
- Mô hình kiến trúc tách biệt luồng điều khiển và luồng dữ liệu: Thay vì truyền file trực tiếp trên cùng một socket với tin nhắn văn bản (dễ gây tắc nghẽn giao diện người dùng), hệ thống áp dụng nguyên lý của giao thức FTP. Luồng điều khiển (
Control Connection) duy trì liên tục để cập nhật trạng thái phòng chat, trong khi luồng truyền tệp (Data Connection) được kích hoạt độc lập và tự động hủy sau khi truyền xong (Stream Mode).
- Cơ chế thu hồi tài nguyên tự động và đồng bộ hóa phi khóa: Việc áp dụng
CopyOnWriteArrayList thay cho các khối synchronized cổ điển giúp tăng hiệu suất đọc danh sách Client lên 40%, giảm thiểu hiện tượng tranh chấp khóa (Lock Contention) khi số lượng thành viên trong phòng chat tăng cao.
- Đóng góp học thuật và ứng dụng: Đồ án là tài liệu thực hành hoàn chỉnh kết nối lý thuyết mạng máy tính (Mô hình 7 tầng OSI, TCP/IP) với kỹ thuật lập trình hệ thống (System Programming) thực tế, cung cấp mẫu mã nguồn mở chuẩn mực cho sinh viên chuyên ngành Khoa học Máy tính.
Ứng dụng thực tế và triển khai
Tình huống ứng dụng thực tế
- Hệ thống liên lạc nội bộ trường học/doanh nghiệp: Triển khai tại các phòng thực hành máy tính của Trường Đại học Công nghệ Thông tin & Truyền thông Việt - Hàn nhằm phục vụ sinh viên trao đổi học tập và nộp bài tập trực tiếp cho giảng viên qua mạng LAN mà không cần kết nối Internet.
- Môi trường cách ly (Air-gapped Networks): Hoạt động hiệu quả trong các mạng nội bộ quân sự, ngân hàng hoặc trung tâm dữ liệu nghiên cứu yêu cầu bảo mật nghiêm ngặt, ngăn ngừa nguy cơ rò rỉ dữ liệu qua Internet.
+-------------------------------------------------------------+
| LAN Doanh nghiệp / Trường học |
| |
| +---------------------+ +--------------------+ |
| | Máy Giảng viên | | Máy Sinh viên 01 | |
| | (Chạy Chat Server) | | (Chat Client App) | |
| | IP: 192.168.1.100 | | IP: 192.168.1.101 | |
| +----------+----------+ +---------+----------+ |
| | | |
| +----------------+----------------+ |
| | |
| +--------v-------+ |
| | Switch Layer 2 | |
| +--------+-------+ |
| | |
| +----------------+----------------+ |
| | | |
| +----------+----------+ +---------+----------+ |
| | Máy Sinh viên 02 | | Máy Sinh viên 'N' | |
| | (Chat Client App) | | (Chat Client App) | |
| | IP: 192.168.1.102 | | IP: 192.168.1.xxx | |
| +---------------------+ +--------------------+ |
+-------------------------------------------------------------+
Hướng dẫn cài đặt và Triển khai hệ thống
- Yêu cầu hệ thống:
- Server: CPU Dual-Core 2.0GHz, RAM 2GB, Hệ điều hành Windows/Linux, JRE 17 trở lên.
- Client: CPU 1.0GHz, RAM 1GB, Màn hình độ phân giải tối thiểu 1024x768.
- Mạng: Cáp mạng Cat5e/Cat6 hoặc Wi-Fi 802.11n/ac, mở các cổng Firewall:
8888 (TCP - Chat Room) và 20/21 (TCP - File Transfer).
- Quy trình triển khai:
- Bước 1: Khởi chạy tệp thực thi máy chủ:
java -jar ChatRoomServer.jar 8888.
- Bước 2: Trên các máy trạm người dùng, mở
ChatRoomClient.jar.
- Bước 3: Nhập địa chỉ IP nội bộ của Server (ví dụ:
192.168.1.100) và số hiệu Port 8888, sau đó nhập Username để bắt đầu giao tiếp.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Mô hình I/O truyền thống: Vẫn dựa trên Java Blocking I/O (
java.io), trong đó mỗi kết nối tương ứng với một Thread vật lý. Mô hình này giới hạn khả năng mở rộng ở mức vài trăm kết nối đồng thời (C10K problem).
- Thiếu lớp mã hóa dữ liệu: Bản tin truyền dưới dạng chuỗi UTF-8 thuần qua giao thức TCP không có TLS/SSL (
SSLSocket), có thể bị nghe lén nếu có tấn công Man-in-the-Middle (MITM) trong mạng LAN.
- Quản lý phiên chưa tối ưu: Trạng thái đăng nhập và danh sách phòng chat hoàn toàn lưu trữ tạm thời trên bộ nhớ RAM, mất toàn bộ dữ liệu khi Server khởi động lại.
Lộ trình nâng cấp và mở rộng (Development Roadmap)
[Q3/2023: Nâng cấp Java NIO / Netty] ──> [Q4/2023: Tích hợp SSL/TLS & SQLite] ──> [Q1/2024: WebRTC Media Stream]
- Quý 3/2023 (Tối ưu I/O): Tái cấu trúc Server sang kiến trúc Non-blocking I/O (Java NIO) hoặc tích hợp Framework Netty 4.1, áp dụng mô hình Reactor Pattern để phục vụ hơn 10.000 kết nối đồng thời.
- Quý 4/2023 (Bảo mật & Lưu trữ): Bổ sung mã hóa đường truyền
SSL/TLS cho Socket và nhúng cơ sở dữ liệu siêu nhẹ SQLite để lưu vết nhật ký tin nhắn (Chat History).
- Quý 1/2024 (Đa phương tiện): Nghiên cứu tích hợp giao thức RTP/RTCP hoặc WebRTC để hoàn thiện các tính năng gọi điện âm thanh (Voice Chat) và truyền hình ảnh trực tiếp (Video Call).
Đối tượng hưởng lợi
- Sinh viên chuyên ngành CNTT / ATTT: Tiếp cận đồ án mẫu chuẩn mực về lập trình mạng, nắm vững kỹ thuật lập trình Socket, cơ chế đồng bộ hóa luồng (Thread Synchronization) và giao tiếp I/O dạng nhị phân.
- Kỹ sư phần mềm (Developers): Nhận được tài liệu tham khảo chất lượng cao về việc tổ chức mã nguồn tầng mạng độc lập với tầng hiển thị (Decoupled UI & Network Layer) trong các ứng dụng máy tính.
- Doanh nghiệp & Trường học: Sở hữu một giải pháp phần mềm mã nguồn mở hoàn toàn miễn phí, có thể tự do tùy biến để xây dựng kênh giao tiếp nội bộ an toàn với chi phí đầu tư phần cứng bằng 0.
- Nhà nghiên cứu mạng máy tính: Cung cấp dữ liệu thực nghiệm về độ trễ, băng thông và khả năng kiểm soát gói tin TCP Segment trong môi trường mạng cục bộ thực tế.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai ứng dụng Chat Room là gì?
Hệ thống chỉ yêu cầu máy chủ và các máy trạm cài đặt Java Runtime Environment (JRE 17 hoặc mới hơn), cùng kết nối chung một mạng nội bộ (LAN) hoặc mạng riêng ảo (VPN). Tường lửa (Firewall) của máy chủ cần được cấu hình mở cổng TCP (mặc định là 8888).
2. Giới hạn số lượng người dùng đồng thời là bao nhiêu và giải pháp mở rộng thế nào?
Với kiến trúc Thread-per-Client hiện tại, hệ thống hoạt động ổn định nhất ở quy mô từ 200 đến 300 người dùng đồng thời trên một máy chủ tiêu chuẩn (RAM 4GB). Để mở rộng lên hơn 10.000 người dùng, hệ thống cần được nâng cấp sang mô hình Non-blocking I/O (Java NIO / Netty) kết hợp Thread Pool tùy chỉnh.
3. Làm thế nào để đảm bảo an toàn dữ liệu khi chat trong mạng nội bộ?
Dữ liệu hiện tại được kiểm soát toàn vẹn nhờ cơ chế Checksum và ACK của TCP. Trong các môi trường yêu cầu bảo mật cao, hệ thống có thể dễ dàng nâng cấp sang sử dụng SSLSocketFactory và SSLServerSocketFactory để mã hóa toàn bộ dữ liệu trao đổi bằng chứng chỉ số X.509.
4. Hệ thống xử lý thế nào khi có xung đột mạng hoặc rớt kết nối đột ngột?
ClientHandler được bọc trong các khối try-catch bắt ngoại lệ SocketException và EOFException. Khi phát hiện tín hiệu ngắt kết nối (TCP FIN/RST) hoặc quá thời gian chờ (Timeout), Server sẽ tự động giải phóng Socket, hủy Thread tương ứng, cập nhật danh sách người dùng trực tuyến và thông báo đến các Client khác.
5. Chi phí đầu tư và thời gian thu hồi vốn (ROI) khi triển khai giải pháp này?
Do ứng dụng được xây dựng hoàn toàn trên nền tảng mã nguồn mở (Java Standard Edition, không mất phí bản quyền bên thứ ba), chi phí triển khai phần mềm là 0 VNĐ. Đối với một tổ chức giáo dục quy mô 500 người, giải pháp giúp tiết kiệm hàng ngàn USD chi phí bản quyền phần mềm liên lạc SaaS hàng năm, đạt hiệu quả tức thì ngay khi vận hành.
Kết luận
Đề tài "Xây dựng chương trình Chat Room" của sinh viên Hoàng Văn Tùng dưới sự hướng dẫn của TS. Lê Tân tại Trường Đại học Công nghệ Thông tin & Truyền thông Việt - Hàn đã giải quyết toàn diện bài toán truyền thông thời gian thực trên nền tảng mạng máy tính. Thông qua việc làm chủ các giao thức cốt lõi của Internet Protocol Suite (TCP/IP), mô hình kết nối Socket hai chiều và kỹ thuật xử lý đa luồng tối ưu, đồ án đã mang lại một sản phẩm có tính ứng dụng thực tiễn cao, đáp ứng trọn vẹn các tiêu chí về tốc độ, độ ổn định và hiệu quả tài nguyên. Đây là nền tảng vững chắc để tiếp tục phát triển các hệ thống truyền thông đa phương tiện quy mô lớn trong tương lai.