Springboot+Vue实现在线聊天室项目
该聊天室为大二上学期计算机网络大作业,并且是本人第一次使用vue实现前后端分离的项目,前端架构尚未熟悉可能会出现一些不妥之处,还请大佬们指出。(本文章写于项目整体完成上线之后,所以一些细节并未写出)
消息推送的实现
配置Controller类
@MessageMapping("/test")
public void test(WebSocketMessage message){
message.setTimeStamp(new Date().getTime());
if (!message.getContent().equals("窗口抖动"))
userService.insertMsg(Integer.parseInt(message.getRoomId()),Integer.parseInt(message.getUid()),message.getContent(),message.getImg(),message.getName());
String auth = userDao.getRoomAuth(Integer.parseInt(message.getRoomId()));
String[] allUsers = auth.substring(1,auth.length()-1).split("\\|");
for(int obj: WebSocketConfig.users){
for (String user:allUsers){
if (Integer.parseInt(user) == obj){
messagingTemplate.convertAndSend("/topic/" + Integer.parseInt(user),message);
}
}
}
}
其中, messagingTemplate用于将消息转发给监听某一socket接口的用户,以依赖注入的方式导入在Controller类中
@Autowired
SimpMessagingTemplate messagingTemplate;
除此之外,在Service中的好友请求中也运用到消息推送,实现发送好友请求的时候接收方可以实时收到消息并查看
message.setTimeStamp(System.currentTimeMillis());
message.setContent("我同意了你的好友请求");
message.setImg(userDao.getMyImg(toUid));
message.setName(userDao.getMyName(toUid));
message.setRoomId(roomId+"");
message.setUid(toUid+"");
messagingTemplate.convertAndSend("/topic/" + toUid,message);
messagingTemplate.convertAndSend("/topic/" + fromUid,message);
message.setTimeStamp(System.currentTimeMillis());
message.setContent("请求加为好友");
message.setUid(fromUid+"");
message.setName(userDao.getMyName(fromUid));
messagingTemplate.convertAndSend("/topic/" + toUid,message);
这两个消息转发的请求将在前端进行特殊处理(这里应该设置message的一个type选项,之前没有考虑,所以前端通过content判断)