在Spring Boot中使用WebSocket实现实时在线人数统计
在Spring Boot中使用WebSocket实现实时在线人数统计可以通过以下步骤完成。首先,需要添加相关的依赖和配置,然后创建WebSocket处理程序和相应的服务类。
在pom.xml文件中添加WebSocket和Spring Boot的相关依赖:
<dependencies> <!-- Spring Boot Starter Web包含了Spring MVC和其他相关依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Starter WebSocket --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency></dependencies>
在application.properties文件中添加WebSocket的配置:
# WebSocket端口号server.port=8080# WebSocket端点spring.websocket.endpoint=/ws
创建一个类来处理WebSocket连接和消息:
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.messaging.simp.SimpMessagingTemplate;import org.springframework.stereotype.Controller;@Controllerpublic class WebSocketController { private final SimpMessagingTemplate messagingTemplate; private final OnlineUsersService onlineUsersService; @Autowired public WebSocketController(SimpMessagingTemplate messagingTemplate, OnlineUsersService onlineUsersService) { this.messagingTemplate = messagingTemplate; this.onlineUsersService = onlineUsersService; } @MessageMapping("/hello") public void greeting(WebSocketRequest request) { // 处理收到的消息,这里可以更新在线用户数等业务逻辑 // 在用户连接时调用此方法 onlineUsersService.userConnected(request.getName()); int onlineUsers = onlineUsersService.getOnlineUsersCount(); WebSocketResponse response = new WebSocketResponse("当前在线人数:" + onlineUsers); // 向客户端发送更新后的在线用户数 messagingTemplate.convertAndSendToUser(request.getName(), "/topic/onlineUsers", response); }}
创建用于WebSocket通信的消息类:
public class WebSocketRequest { private String name; // Getter and Setter}javaCopy codepublic class WebSocketResponse { private String content; public WebSocketResponse(String content) { this.content = content; } // Getter}
在@SpringBootApplication注解的主应用程序类中添加配置,以启用WebSocket消息代理:
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@EnableWebSocketMessageBrokerpublic class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { // 启用简单的消息代理,以将消息发送到指定的前缀 config.enableSimpleBroker("/topic"); // 设置应用程序的消息目标前缀 config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { // 注册一个WebSocket端点,供客户端连接 registry.addEndpoint("/ws").withSockJS(); }}
创建一个服务类用于处理在线用户的统计逻辑:
import org.springframework.stereotype.Service;import java.util.HashSet;import java.util.Set;@Servicepublic class OnlineUsersService { // 使用Set存储在线用户的唯一标识,例如用户ID private final Set<String> onlineUserIds = new HashSet<>(); // 用户连接时调用,将用户ID添加到在线用户集合中 public void userConnected(String userId) { onlineUserIds.add(userId); } // 用户断开连接时调用,将用户ID从在线用户集合中移除 public void userDisconnected(String userId) { onlineUserIds.remove(userId); } // 获取在线用户数 public int getOnlineUsersCount() { return onlineUserIds.size(); }}
更新WebSocketController类,使用服务类获取在线用户数:
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.messaging.simp.SimpMessagingTemplate;import org.springframework.stereotype.Controller;@Controllerpublic class WebSocketController { private final SimpMessagingTemplate messagingTemplate; private final OnlineUsersService onlineUsersService; @Autowired public WebSocketController(SimpMessagingTemplate messagingTemplate, OnlineUsersService onlineUsersService) { this.messagingTemplate = messagingTemplate; this.onlineUsersService = onlineUsersService; } @MessageMapping("/hello") public void greeting(WebSocketRequest request) { // 处理收到的消息,这里可以更新在线用户数等业务逻辑 int onlineUsers = onlineUsersService.getOnlineUsersCount(); messagingTemplate.convertAndSend("/topic/onlineUsers", "当前在线人数:" + onlineUsers); }}
这样,当有用户连接到WebSocket并发送消息时,greeting方法将被调用,处理逻辑并将更新后的在线用户数发送到/topic/onlineUsers。
示例中完整代码,可以从下面网址获取:
https://gitee.com/jlearning/wechatdemo.git
https://github.com/icoderoad/wxdemo.git
本文链接:http://www.28at.com/showinfo-26-34675-0.html在Spring Boot中使用WebSocket实现实时在线人数统计
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com