Bladeren bron

fix netty

zwhui 1 jaar geleden
bovenliggende
commit
fe2a4c336c

+ 3 - 0
midjourney-netty-websocket-spring-boot-starter/src/main/java/com/yhlxj/netty/websocket/starter/netty/WebsocketActionDispatch.java

@@ -3,6 +3,7 @@ package com.yhlxj.netty.websocket.starter.netty;
 import com.yhlxj.netty.websocket.starter.support.MethodParamsBuild;
 import com.yhlxj.netty.websocket.starter.support.WebsocketServerEndpoint;
 import io.netty.channel.Channel;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.util.AntPathMatcher;
 import org.springframework.util.ReflectionUtils;
 
@@ -15,6 +16,7 @@ import java.util.concurrent.ConcurrentHashMap;
  * @author chan
  * @date 2024-09-06 22:39
  */
+@Slf4j
 public class WebsocketActionDispatch {
 
     private AntPathMatcher antPathMatcher = new AntPathMatcher();
@@ -96,6 +98,7 @@ public class WebsocketActionDispatch {
 
     public Map<String,String> getUriTemplateVariables(String lookupPath) {
         WebsocketServerEndpoint websocketServerEndpoint = matchServerEndpoint(lookupPath);
+        log.info("websocketServerEndpoint:{},lookupPath:{}",websocketServerEndpoint,lookupPath);
         return antPathMatcher.extractUriTemplateVariables(websocketServerEndpoint.getPath(), lookupPath);
     }
 

+ 1 - 2
midjourney-netty-websocket-web/src/main/java/com/yhlxj/netty/websocket/midjounrey/controller/NotifyController.java

@@ -1,6 +1,5 @@
 package com.yhlxj.netty.websocket.midjounrey.controller;
 
-import com.cyksj.common.annotation.Log;
 import com.yhlxj.netty.websocket.midjounrey.dao.model.dto.SendMsgReq;
 import com.yhlxj.netty.websocket.midjounrey.service.SocketServer;
 import lombok.extern.slf4j.Slf4j;
@@ -20,7 +19,7 @@ public class NotifyController {
     @RequestMapping("/send")
     public String sendMsg(@RequestBody SendMsgReq sendMsgReq){
         log.info("sendMsgReq:{}", sendMsgReq);
-        SocketServer.sendMessage(sendMsgReq.getMsg(),sendMsgReq.getUserId());
+        SocketServer.sendMessage(sendMsgReq.getMsg(),sendMsgReq.getUserToken());
         return "success";
     }
 

+ 1 - 1
midjourney-netty-websocket-web/src/main/java/com/yhlxj/netty/websocket/midjounrey/dao/model/dto/SendMsgReq.java

@@ -9,7 +9,7 @@ import lombok.Data;
 @Data
 public class SendMsgReq {
 
-    private String userId;
+    private String userToken;
 
     private String msg;
 

+ 15 - 5
midjourney-netty-websocket-web/src/main/java/com/yhlxj/netty/websocket/midjounrey/service/SocketServer.java

@@ -76,6 +76,9 @@ public class SocketServer {
 			}
 		}
 		Set<Session> sessions = sessionPool.computeIfAbsent(userToken, k -> ConcurrentHashMap.newKeySet());
+		if (sessions.size() >= 3){
+			sessions.stream().findFirst().ifPresent(s -> onClose(s,userToken));
+		}
 		sessions.add(session);
 		sessionPool.put(userToken, sessions);
 		sessionIds.put(session.getId(), userToken);
@@ -138,8 +141,14 @@ public class SocketServer {
 	 * @param error
 	 */
 	@OnError
-	public void onError(Session session, Throwable error) {
-		error.printStackTrace();
+	public void onError(Session session, Throwable error, @PathParam("userToken") String userToken) {
+		log.info("client【{}】onError 【{}】",userToken, error.getMessage());
+		Set<Session> sessions = sessionPool.get(userToken);
+		if (CollectionUtil.isNotEmpty(sessions)) {
+			sessions.removeIf(session1 -> session1.getId().equals(session.getId()));
+			sessionIds.remove(session.getId());
+		}
+		log.info("client【{}】【{}】onError",userToken, session.getId());
 	}
 
 	/**
@@ -175,11 +184,12 @@ public class SocketServer {
 		sendMessage(packMsg(typeEnum, message), userToken);
 	}
 
-	public static void sendMessage(String message,String userId){
-		Set<Session> sessions = sessionPool.get(userId);
+	public static void sendMessage(String message,String userToken){
+		Set<Session> sessions = sessionPool.get(userToken);
 		if (CollectionUtil.isNotEmpty(sessions)) {
 			sessions.forEach((session)->{
-				session.sendText(message);
+			log.info("[WS发送消息],session:{},message:{}",session, message);
+				session.sendText(packMsg(WsMessageTypeEnum.SERVER_TASK_INFO, new JSONObject(message)));
 			});
 		}
 	}

+ 5 - 5
midjourney-netty-websocket-web/src/main/resources/application.yml

@@ -3,7 +3,7 @@ server:
 
 netty:
   websocket:
-    port: 8086
+    port: 8087
     bossThreadNums: 1
     workerThreadNums: 2
     connectTimeout: 15000
@@ -62,13 +62,13 @@ spring:
       }
   redis:
     # Redis数据库索引(默认为 0)
-    database: 1
+    database: 0
     # Redis服务器地址
-    host: r-bp11e3hvovqtzl0a27pd.redis.rds.aliyuncs.com
+    host: 175.24.198.76
     # Redis服务器连接端口
-    port: 6379
+    port: 63222
     # Redis 密码
-    password: Shanxing12345
+    password: yinhe9913
     lettuce:
       pool:
         # 连接池中的最小空闲连接

+ 2 - 0
midjourney/src/main/java/com/yhlxj/dao/model/entity/MidjourneyUserConversation.java

@@ -23,6 +23,8 @@ public class MidjourneyUserConversation extends BaseEntity implements Serializab
 
     private Long userId;
 
+    private String userToken;
+
     /**
      * plus服务任务id
      */

+ 25 - 19
midjourney/src/main/java/com/yhlxj/service/midjourney/impl/MidjourneyServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.URLUtil;
+import cn.hutool.db.sql.SqlBuilder;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONArray;
@@ -164,7 +165,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
     public SubmitResult submitImagine(MidjourneyUser user, Integer mode,String prompt, String botType, List<String> base64Array, Long num) throws Exception {
         Map<String, Object> imagineParam = MapUtil.builder(new HashMap<String,Object>())
                 .put("prompt", prompt)
-                .put("state", user.getId().toString())
+                .put("state", String.join(",",user.getId().toString(),user.getUserToken()))
                 .build();
         if (CollectionUtil.isNotEmpty(base64Array)) {
             imagineParam.put("base64Array", base64Array);
@@ -175,7 +176,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         }else {
             redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getProperties().get("discordInstanceId").toString(), 1.0);
         }
-        saveConversation(user.getId(), mode,result,"IMAGINE", StringUtils.EMPTY, botType);
+        saveConversation(user, mode,result,"IMAGINE", StringUtils.EMPTY, botType);
         Map<String, Object> properties = result.getProperties();
         String modeStr;
         String mjVersionStatusKey;
@@ -201,7 +202,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         return result;
     }
 
-    public MidjourneyUserConversation saveConversation(Long userId,Integer mode,SubmitResult result, String action,String prompt,String botType) throws Exception {
+    public MidjourneyUserConversation saveConversation(MidjourneyUser user,Integer mode,SubmitResult result, String action,String prompt,String botType) throws Exception {
         if (result.getCode() == 23) {
             return null;
         }
@@ -213,7 +214,8 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         }
         if (conversation == null){
             conversation = new MidjourneyUserConversation();
-            conversation.setUserId(userId);
+            conversation.setUserId(user.getId());
+            conversation.setUserToken(user.getUserToken());
             conversation.setTaskId(taskId);
             conversation.setAction(action);
             conversation.setPrompt(prompt);
@@ -239,14 +241,14 @@ public class MidjourneyServiceImpl implements MidjourneyService {
     @Override
     public SubmitResult submitDescribe(MidjourneyUser user,Integer mode, String botType, String base64, Long num) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
-                .put("state", user.getId().toString())
+                .put("state", String.join(",",user.getId().toString(),user.getUserToken()))
                 .put("base64", base64)
                 .build();
         SubmitResult result = submit(user,mode,"describe", null, param,false, num);
         if (mode == 2) {
             redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getProperties().get("discordInstanceId").toString(), 1.0);
         }
-        saveConversation(user.getId(), mode,result,"DESCRIBE", StringUtils.EMPTY, botType);
+        saveConversation(user, mode,result,"DESCRIBE", StringUtils.EMPTY, botType);
         return result;
     }
 
@@ -254,7 +256,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
     public SubmitResult submitBlend(MidjourneyUser user, Integer mode,BlendDimensions dimensions, String botType, List<String> base64Array, Long num) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
                 .put("base64Array", base64Array)
-                .put("state", user.getId().toString())
+                .put("state", String.join(",",user.getId().toString(),user.getUserToken()))
                 .build();
         if (dimensions != null) {
             param.put("dimensions", dimensions);
@@ -263,7 +265,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         if (mode == 2) {
             redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getProperties().get("discordInstanceId").toString(), 1.0);
         }
-        saveConversation(user.getId(), mode,result,"BLEND", StringUtils.EMPTY, botType);
+        saveConversation(user, mode,result,"BLEND", StringUtils.EMPTY, botType);
         Map<String, Object> properties = result.getProperties();
         MjVersionStatus mjVersionStatus = MJ_VERSION_STATUS_MAP.get(mode == 1 ? "v6-fast-model" : "v6-relax-model");
         int count = 1;
@@ -284,7 +286,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         MidjourneyUserConversation midjourneyUserConversation = conversationMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUserConversation.class).eq(MidjourneyUserConversation::getTaskId, taskId).last("limit 1"));
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
                 .put("taskId", taskId.toString())
-                .put("state", user.getId().toString())
+                .put("state",String.join(",",user.getId().toString(),user.getUserToken()))
                 .build();
         if (StringUtils.isNotBlank(prompt)) {
             param.put("prompt", prompt);
@@ -305,7 +307,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
             }
         }
         SubmitResult result = submit(user,mode,"modal", null, param,false, num);
-        saveConversation(user.getId(),  mode,result,"MODAL", StringUtils.EMPTY, StringUtils.EMPTY);
+        saveConversation(user,  mode,result,"MODAL", StringUtils.EMPTY, StringUtils.EMPTY);
         Map<String, Object> properties = result.getProperties();
         String modeStr;
         String mjVersionStatusKey;
@@ -337,13 +339,13 @@ public class MidjourneyServiceImpl implements MidjourneyService {
     public SubmitResult submitShorten(MidjourneyUser user,Integer mode, String botType, String prompt, Long num) throws Exception {
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
                 .put("prompt", prompt)
-                .put("state", user.getId().toString())
+                .put("state", String.join(",",user.getId().toString(),user.getUserToken()))
                 .build();
         SubmitResult result = submit(user,mode,"shorten", null, param,false, num);
         if (mode == 2) {
             redisService.hincr(RedisService.key.MIDJOURNEY_ACCOUNT.getName(), result.getProperties().get("discordInstanceId").toString(), 1.0);
         }
-        saveConversation(user.getId(), mode, result,"SHORTEN", StringUtils.EMPTY, botType);
+        saveConversation(user, mode, result,"SHORTEN", StringUtils.EMPTY, botType);
         return result;
     }
 
@@ -430,7 +432,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         }
         Map<String, Object> param = MapUtil.builder(new HashMap<String,Object>())
                 .put("taskId", taskId)
-                .put("state", user.getId().toString())
+                .put("state", String.join(",",user.getId().toString(),user.getUserToken()))
                 .put("customId", customId)
                 .build();
         SubmitResult result = submit(user,mode,"action", conversation.getInstanceId(),param,false, num);
@@ -468,7 +470,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         }
         properties.put("estimateTime", System.currentTimeMillis() + (second * count));
         properties.put("finalPrompt",conversation.getPrompt());
-        MidjourneyUserConversation midjourneyUserConversation = saveConversation(user.getId(), mode, result, "ACTION", StringUtils.EMPTY, botType);
+        MidjourneyUserConversation midjourneyUserConversation = saveConversation(user, mode, result, "ACTION", StringUtils.EMPTY, botType);
         properties.put("id",midjourneyUserConversation.getId());
         return result;
     }
@@ -697,7 +699,9 @@ public class MidjourneyServiceImpl implements MidjourneyService {
                         if (StringUtil.isNotBlank(conversation.getImageUrl())) {
                             conversation.setImageUrl(conversation.getImageUrl().replace("cdn.discordapp.com", "mj.galaxydvd.com"));
                         }
-                        conversation.setUserId(jsons.getLong("state"));
+                        String[] states = jsons.getStr("state").split(",");
+                        conversation.setUserId(Long.parseLong(states[0]));
+                        conversation.setUserToken(states[1]);
                         conversation.setTaskId(jsons.getStr("id"));
                         list.add(conversation);
                         TASK_EXECUTOR.execute(() -> {
@@ -805,7 +809,7 @@ public class MidjourneyServiceImpl implements MidjourneyService {
 
     private static String uploadPic(String url, String prefix) throws IOException {
         // 替换 URL 并下载图像字节
-        url = url.replace("cdn.mj.liuliangbang.vip", "media.liuliangbang.vip");
+        url = url.replace("cdn.mj.liuliangbang.vip", "cdn.discordapp.com");
 
         byte[] body;
         try {
@@ -943,7 +947,9 @@ public class MidjourneyServiceImpl implements MidjourneyService {
         if (conversation.getPrompt() == null){
             conversation.setPrompt(jsons.getStr("promptFull"));
         }
-        conversation.setUserId(jsons.getLong("state"));
+        String[] states = jsons.getStr("state").split(",");
+        conversation.setUserId(Long.parseLong(states[0]));
+        conversation.setUserToken(states[1]);
         conversation.setTaskId(jsons.getStr("id"));
         conversation.setId(null);
         JSONObject jsonObject = new JSONObject(conversation.getProperties());
@@ -1169,11 +1175,11 @@ public class MidjourneyServiceImpl implements MidjourneyService {
             if(JSONUtil.isJson(conversation.getFailReason())){
                 conversation.setFailReason("生成图片失败");
             }
-            String url = "https://web.liuliangbang.vip/8080/api/msg/send";
+            String url = "https://mj.liuliangbang.vip/8080/api/msg/send";
         Map<String, Object> data = MapUtil.builder(new HashMap<String,Object>())
                 .put("taskId", conversation.getTaskId())
                 .put("msg", JSONUtil.toJsonStr(conversation))
-                .put("userId", conversation.getUserId())
+                .put("userToken", conversation.getUserToken())
                 .build();
         HttpUtil.post(url, JSONUtil.toJsonStr(data));
             //wssSession.sendMessage(WsMessageTypeEnum.SERVER_TASK_INFO, new JSONObject(conversation));