09-16-netty优化

This commit is contained in:
2025-09-16 20:45:30 +08:00
parent 4354d0a687
commit 579fd04687
3 changed files with 66 additions and 32 deletions

View File

@ -68,12 +68,12 @@ public class ChatServer {
}); });
log.info("Netty聊天服务器启动端口" + port); log.info("Netty聊天服务器启动端口" + port);
bootstrap.bind(port).sync(); // bootstrap.bind(port).sync();
// ChannelFuture future = bootstrap.bind(port).sync(); ChannelFuture future = bootstrap.bind(port).sync();
// future.channel().closeFuture().sync(); future.channel().closeFuture().sync();
} finally { } finally {
// workerGroup.shutdownGracefully().sync(); workerGroup.shutdownGracefully().sync();
// bossGroup.shutdownGracefully().sync(); bossGroup.shutdownGracefully().sync();
} }
} }

View File

@ -21,6 +21,7 @@ import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.system.service.impl.SysUserServiceImpl; import org.dromara.system.service.impl.SysUserServiceImpl;
import org.dromara.websocket.domain.ChatGroup; import org.dromara.websocket.domain.ChatGroup;
import org.dromara.websocket.domain.ChatHistory; import org.dromara.websocket.domain.ChatHistory;
import org.dromara.websocket.domain.enums.ChatRoomEnum;
import org.dromara.websocket.service.Impl.ChatGroupServiceImpl; import org.dromara.websocket.service.Impl.ChatGroupServiceImpl;
import org.dromara.websocket.service.Impl.ChatHistoryServiceImpl; import org.dromara.websocket.service.Impl.ChatHistoryServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -154,16 +155,16 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
userRoomCountMap.put(loginUser.getUserId()+"+"+chatGroup.getId().toString(), list.size()); userRoomCountMap.put(loginUser.getUserId()+"+"+chatGroup.getId().toString(), list.size());
} }
//在遍历的同时寻找是否有系统消息房间 //在遍历的同时寻找是否有系统消息房间
if (!isHaveSystemRoom && chatGroup.getMembers().contains("[99")){ if (!isHaveSystemRoom && chatGroup.getMembers().contains("["+ ChatRoomEnum.SYSTEM.getRoomId())){
isHaveSystemRoom = true; isHaveSystemRoom = true;
} }
if (!isHaveAttendanceRoom && chatGroup.getMembers().contains("[100")){ if (!isHaveAttendanceRoom && chatGroup.getMembers().contains("["+ChatRoomEnum.ATTENDANCE.getRoomId())){
isHaveAttendanceRoom = true; isHaveAttendanceRoom = true;
} }
if (!isHaveSafeRoom && chatGroup.getMembers().contains("[101")){ if (!isHaveSafeRoom && chatGroup.getMembers().contains("["+ChatRoomEnum.SAFE.getRoomId())){
isHaveSafeRoom = true; isHaveSafeRoom = true;
} }
if (!isHaveQualityRoom && chatGroup.getMembers().contains("[102")){ if (!isHaveQualityRoom && chatGroup.getMembers().contains("["+ChatRoomEnum.QUALITY.getRoomId())){
isHaveQualityRoom = true; isHaveQualityRoom = true;
} }
} }
@ -180,7 +181,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
if (!isHaveSystemRoom){ if (!isHaveSystemRoom){
ChatGroup chatGroup = new ChatGroup(); ChatGroup chatGroup = new ChatGroup();
chatGroup.setType(String.valueOf(2)); chatGroup.setType(String.valueOf(2));
chatGroup.setMembers("[99, "+loginUser.getUserId()+"]"); chatGroup.setMembers("["+ChatRoomEnum.SYSTEM.getRoomId()+", " + loginUser.getUserId()+"]");
chatGroupService.save(chatGroup); chatGroupService.save(chatGroup);
} }
@ -188,7 +189,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
if (!isHaveAttendanceRoom){ if (!isHaveAttendanceRoom){
ChatGroup chatGroup = new ChatGroup(); ChatGroup chatGroup = new ChatGroup();
chatGroup.setType(String.valueOf(3)); chatGroup.setType(String.valueOf(3));
chatGroup.setMembers("[100, "+loginUser.getUserId()+"]"); chatGroup.setMembers("["+ChatRoomEnum.ATTENDANCE.getRoomId() +", "+loginUser.getUserId()+"]");
chatGroupService.save(chatGroup); chatGroupService.save(chatGroup);
} }
@ -196,7 +197,8 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
if (!isHaveSafeRoom){ if (!isHaveSafeRoom){
ChatGroup chatGroup = new ChatGroup(); ChatGroup chatGroup = new ChatGroup();
chatGroup.setType(String.valueOf(4)); chatGroup.setType(String.valueOf(4));
chatGroup.setMembers("[101, "+loginUser.getUserId()+"]"); chatGroup.setMembers("["+ChatRoomEnum.SAFE.getRoomId() +", "+loginUser.getUserId()+"]");
// chatGroup.setMembers("[101, "+loginUser.getUserId()+"]");
chatGroupService.save(chatGroup); chatGroupService.save(chatGroup);
} }
@ -204,7 +206,8 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
if (!isHaveQualityRoom){ if (!isHaveQualityRoom){
ChatGroup chatGroup = new ChatGroup(); ChatGroup chatGroup = new ChatGroup();
chatGroup.setType(String.valueOf(5)); chatGroup.setType(String.valueOf(5));
chatGroup.setMembers("[102, "+loginUser.getUserId()+"]"); chatGroup.setMembers("["+ChatRoomEnum.QUALITY.getRoomId() +", "+loginUser.getUserId()+"]");
// chatGroup.setMembers("[102, "+loginUser.getUserId()+"]");
chatGroupService.save(chatGroup); chatGroupService.save(chatGroup);
} }
@ -250,17 +253,17 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
userChannelMap.remove(userId); userChannelMap.remove(userId);
//构建推送消息 //构建推送消息
List<Long> userIds = new ArrayList<>(); // List<Long> userIds = new ArrayList<>();
//类型转换 // //类型转换
for (String s : onlineUserList) { // for (String s : onlineUserList) {
userIds.add(Long.parseLong(s)); // userIds.add(Long.parseLong(s));
} // }
List<UserDTO> userDTOS = sysUserService.selectListByIds(userIds); // List<UserDTO> userDTOS = sysUserService.selectListByIds(userIds);
//
JSONObject message = new JSONObject(); // JSONObject message = new JSONObject();
message.put("type", "2"); // message.put("type", "2");
message.put("users", userDTOS); // message.put("users", userDTOS);
channelGroup.writeAndFlush(new TextWebSocketFrame(message.toJSONString())); // channelGroup.writeAndFlush(new TextWebSocketFrame(message.toJSONString()));
} else { } else {
userChannelMap.put(userId, channelHandlerContexts); userChannelMap.put(userId, channelHandlerContexts);
} }
@ -467,13 +470,13 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
//1:系统消息 //1:系统消息
case "0" ->{ case "0" ->{
//生成系统消息的聊天记录 //生成系统消息的聊天记录
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[99, "+userId+"]"); lambdaQueryWrapper.eq(ChatGroup::getMembers,"["+ChatRoomEnum.SYSTEM.getRoomId()+", "+userId+"]");
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper); groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
//如果给成员发送系统消息 而该成员还没有建立过连接从而没有群聊房间 则创建该成员系统消息房间 //如果给成员发送系统消息 而该成员还没有建立过连接从而没有群聊房间 则创建该成员系统消息房间
if (groupServiceOne == null){ if (groupServiceOne == null){
groupServiceOne = new ChatGroup(); groupServiceOne = new ChatGroup();
groupServiceOne.setType(String.valueOf(2)); groupServiceOne.setType(String.valueOf(2));
groupServiceOne.setMembers("[99, "+userId+"]"); groupServiceOne.setMembers("["+ChatRoomEnum.SYSTEM.getRoomId()+", "+userId+"]");
groupServiceOne.setLastMessage(message); groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date()); groupServiceOne.setLastMessageTime(new Date());
// chatGroupService.save(groupServiceOne); // chatGroupService.save(groupServiceOne);
@ -495,13 +498,14 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
//2:考勤消息 //2:考勤消息
case "1" ->{ case "1" ->{
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[100, "+userId+"]"); // lambdaQueryWrapper.eq(ChatGroup::getMembers,"[100, "+userId+"]");
lambdaQueryWrapper.eq(ChatGroup::getMembers,"["+ChatRoomEnum.ATTENDANCE.getRoomId()+", "+userId+"]");
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper); groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
//如果给成员发送考勤消息 而该成员还没有建立过连接从而没有考勤房间 则创建该成员考勤消息房间 //如果给成员发送考勤消息 而该成员还没有建立过连接从而没有考勤房间 则创建该成员考勤消息房间
if (groupServiceOne == null){ if (groupServiceOne == null){
groupServiceOne = new ChatGroup(); groupServiceOne = new ChatGroup();
groupServiceOne.setType(String.valueOf(3)); groupServiceOne.setType(String.valueOf(3));
groupServiceOne.setMembers("[100, "+userId+"]"); groupServiceOne.setMembers("["+ChatRoomEnum.ATTENDANCE.getRoomId()+", "+userId+"]");
groupServiceOne.setLastMessage(message); groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date()); groupServiceOne.setLastMessageTime(new Date());
// chatGroupService.save(groupServiceOne); // chatGroupService.save(groupServiceOne);
@ -523,13 +527,13 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
//安全消息 //安全消息
case "2" ->{ case "2" ->{
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[101, "+userId+"]"); lambdaQueryWrapper.eq(ChatGroup::getMembers,"["+ChatRoomEnum.SAFE.getRoomId()+", "+userId+"]");
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper); groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
//如果给成员发送安全消息 而该成员还没有建立过连接从而没有安全消息 则创建该成员安全消息房间 //如果给成员发送安全消息 而该成员还没有建立过连接从而没有安全消息 则创建该成员安全消息房间
if (groupServiceOne == null){ if (groupServiceOne == null){
groupServiceOne = new ChatGroup(); groupServiceOne = new ChatGroup();
groupServiceOne.setType(String.valueOf(4)); groupServiceOne.setType(String.valueOf(4));
groupServiceOne.setMembers("[101, "+userId+"]"); groupServiceOne.setMembers("["+ChatRoomEnum.SAFE.getRoomId()+", "+userId+"]");
groupServiceOne.setLastMessage(message); groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date()); groupServiceOne.setLastMessageTime(new Date());
// chatGroupService.save(groupServiceOne); // chatGroupService.save(groupServiceOne);
@ -551,13 +555,13 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
//质量消息 //质量消息
case "3" ->{ case "3" ->{
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[102, "+userId+"]"); lambdaQueryWrapper.eq(ChatGroup::getMembers,"["+ChatRoomEnum.QUALITY.getRoomId()+", "+userId+"]");
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper); groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
//如果给成员发送质量消息 而该成员还没有建立过连接从而没有质量消息 则创建该成员质量消息房间 //如果给成员发送质量消息 而该成员还没有建立过连接从而没有质量消息 则创建该成员质量消息房间
if (groupServiceOne == null){ if (groupServiceOne == null){
groupServiceOne = new ChatGroup(); groupServiceOne = new ChatGroup();
groupServiceOne.setType(String.valueOf(5)); groupServiceOne.setType(String.valueOf(5));
groupServiceOne.setMembers("[102, "+userId+"]"); groupServiceOne.setMembers("["+ChatRoomEnum.QUALITY.getRoomId()+", "+userId+"]");
groupServiceOne.setLastMessage(message); groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date()); groupServiceOne.setLastMessageTime(new Date());
// chatGroupService.save(groupServiceOne); // chatGroupService.save(groupServiceOne);
@ -583,6 +587,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
} }
chatGroupService.saveOrUpdate(groupServiceOne); chatGroupService.saveOrUpdate(groupServiceOne);
chatHistory.setMessageType(jsonObject.get("messageType").toString());
chatHistoryService.save(chatHistory); chatHistoryService.save(chatHistory);
//发送消息后 将该房间未读消息数加1 //发送消息后 将该房间未读消息数加1

View File

@ -0,0 +1,29 @@
package org.dromara.websocket.domain.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum ChatRoomEnum {
SYSTEM("99", "系统消息"),
ATTENDANCE("100", "考勤消息"),
SAFE("101", "安全消息"),
QUALITY("102", "质量消息");
/**
* ID
*/
private final String roomId;
/**
* 名称
*/
private final String roomName;
}