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