Tạo ứng dụng chat đơn giản sử dụng Socket.IO trong Java
Hướng dẫn chi tiết cách tạo ứng dụng chat đơn giản bằng Java và Socket.IO. Bài viết này sẽ giúp bạn hiểu cách thiết lập server và client để giao tiếp theo thời gian thực.
Bài viết này sẽ hướng dẫn bạn cách xây dựng một ứng dụng chat đơn giản sử dụng Socket.IO trong Java. Chúng ta sẽ thiết lập server bằng Spring Boot và client bằng Java Swing để tạo giao diện người dùng. Ứng dụng sẽ cho phép người dùng gửi và nhận tin nhắn trong thời gian thực.
Mã Java:
1. Cài đặt server với Spring Boot
// build.gradle
plugins {
id 'org.springframework.boot' version '3.0.0'
id 'io.spring.dependency-management' version '1.0.12.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'org.springframework.boot:spring-boot-starter'
}
tasks.named('test') {
useJUnitPlatform()
}
// WebSocketConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat").withSockJS();
}
}
// ChatController.java
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
@Controller
public class ChatController {
private final SimpMessagingTemplate messagingTemplate;
public ChatController(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
@MessageMapping("/send")
public void sendMessage(String message) {
messagingTemplate.convertAndSend("/topic/messages", message);
}
}
2. Cài đặt client với Java Swing
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
public class ChatClient extends WebSocketClient {
private JTextArea textArea;
private JTextField textField;
public ChatClient(String serverUri, JTextArea textArea, JTextField textField) {
super(new URI(serverUri));
this.textArea = textArea;
this.textField = textField;
}
@Override
public void onOpen(ServerHandshake handshakedata) {
System.out.println("Connected to server");
}
@Override
public void onMessage(String message) {
textArea.append(message + "\n");
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("Disconnected from server");
}
@Override
public void onError(Exception ex) {
ex.printStackTrace();
}
public static void main(String[] args) {
JFrame frame = new JFrame("Chat Application");
JTextArea textArea = new JTextArea(20, 30);
JTextField textField = new JTextField(30);
JButton sendButton = new JButton("Send");
frame.getContentPane().add(new JScrollPane(textArea), "Center");
frame.getContentPane().add(textField, "South");
frame.getContentPane().add(sendButton, "South");
ChatClient client = new ChatClient("ws://localhost:8080/chat", textArea, textField);
client.connect();
sendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String message = textField.getText();
client.send(message);
textField.setText("");
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Giải thích chi tiết từng dòng code:
-
Server:
-
WebSocketConfig
: Cấu hình WebSocket với Spring Boot, cho phép sử dụng STOMP để gửi tin nhắn. -
ChatController
: Nhận và xử lý tin nhắn gửi từ client, gửi đến tất cả các client đã kết nối.
-
-
Client:
-
ChatClient
: Kết nối đến server WebSocket và quản lý việc gửi và nhận tin nhắn. Sử dụng Java Swing để tạo giao diện người dùng cho ứng dụng chat.
-
Yêu cầu hệ thống:
- Java 17 trở lên
- Spring Boot 3.0 trở lên
- Thư viện WebSocket
Cách cài đặt các thư viện để chạy được đoạn mã Java trên:
Sử dụng Gradle để quản lý phụ thuộc. Chạy lệnh gradle build
trong thư mục chứa build.gradle
để cài đặt các thư viện cần thiết.
Lời khuyên:
- Đảm bảo server đang chạy trước khi khởi động client.
- Tìm hiểu thêm về STOMP để mở rộng tính năng của ứng dụng chat.