09-16-netty优化
This commit is contained in:
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user