From b91acaec84806fa7215ada0e55f999bf33def586 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期六, 29 三月 2025 15:57:30 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 77 ++++++++++++++++++++++++++++++++------ 1 files changed, 64 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java index 02824c8..9f01c00 100644 --- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java @@ -57,6 +57,7 @@ private static final boolean DEBUG = false;//璋冭瘯妯″紡 + private List<JSONObject> socketReadResults = new ArrayList<>(); private List<JSONObject> socketResults = new ArrayList<>(); //鍘熷璁惧鏁版嵁 @@ -77,6 +78,7 @@ while (true) { try { listenSocketMessage(); + listenInit();//鐩戝惉鍒濆鍖栦簨浠� } catch (Exception e) { e.printStackTrace(); } @@ -135,7 +137,6 @@ Thread otherThread = new Thread(() -> { while (true) { try { - listenInit();//鐩戝惉鍒濆鍖栦簨浠� saveLog();//淇濆瓨鏁版嵁 } catch (Exception e) { e.printStackTrace(); @@ -194,7 +195,19 @@ } JSONObject result = JSON.parseObject(sb.toString());//寰楀埌鍝嶅簲缁撴灉闆� - if (!socketResults.isEmpty() && socketResults.size() >= 5) { + + String msgType = result.getString("msgType"); + if ("responseMsg".equals(msgType)) { + JSONObject response = result.getJSONObject("response"); + JSONObject body = response.getJSONObject("body"); + if (body.containsKey("workingMode")) { + //read + socketReadResults.add(body); + return; + } + } + + if (!socketResults.isEmpty() && socketResults.size() >= 20) { socketResults.remove(0);//娓呯悊澶磋妭鐐� } socketResults.add(result);//娣诲姞鏁版嵁 @@ -220,7 +233,6 @@ JSONObject resultResponse = JSON.parseObject(socketResult.get("response").toString()); JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString()); String responseType = resultBody.get("responseType").toString(); - String responseTaskId = resultBody.get("taskId").toString(); if (DEBUG) { result = socketResult; break; @@ -230,8 +242,11 @@ continue;//鍝嶅簲绫诲瀷涓庤姹傜被鍨嬩笉涓�鑷达紝涓嶅湪璋冭瘯妯″紡涓� } - if (taskId != null && !responseTaskId.equals(taskId)) { - continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓� + if (taskId != null) { + String responseTaskId = resultBody.get("taskId").toString(); + if (!responseTaskId.equals(taskId)) { + continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓� + } } result = socketResult; @@ -274,7 +289,14 @@ //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�----------- NyShuttleHttpCommand readStatusCommand = getReadStatusCommand(slave.getId()); - JSONObject data = requestCommand(readStatusCommand); + requestCommandAsync(readStatusCommand);//璇锋眰鐘舵�� + + if (this.socketReadResults.isEmpty()) { + return; + } + + JSONObject data = this.socketReadResults.get(0); + this.socketReadResults.remove(0); if (data == null) { if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) { //鏈�鍚庝竴娆′笂绾挎椂闂磋秴杩�60s锛岃瀹氱绾� @@ -400,7 +422,7 @@ socketResults.remove(removeIdx); } } catch (Exception e) { -// e.printStackTrace(); + e.printStackTrace(); } } @@ -464,18 +486,14 @@ for (NyShuttleHttpCommand requestCommand : commandList) { while (true) { - int i = 0; - i++; JSONObject result = requestCommand(requestCommand); if (result == null) { // return response;//璇锋眰澶辫触 - News.info("Socket鍛戒护涓嬪彂澶辫触锛屼换鍔℃暟鎹�={}锛屾鏁�={}", JSON.toJSON(requestCommand), i); continue;//璇锋眰澶辫触灏濊瘯閲嶆柊璇锋眰 } this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 response.setMessage(JSON.toJSONString(result)); response.setResult(true); - News.info("Socket鍛戒护涓嬪彂鎴愬姛锛屼换鍔℃暟鎹�={}锛屾鏁�={}锛屽搷搴旀暟鎹�={}", JSON.toJSON(requestCommand), i, JSON.toJSONString(result)); break; } } @@ -714,6 +732,23 @@ return true; } return false; + } + + @Override + public boolean isFault() { + if (this.shuttleProtocol.getErrorCode() == null + || this.shuttleProtocol.getMode() == null + || this.shuttleProtocol.getExtend() == null + ) { + return false; + } + + InnerSuhttleExtend extend = (InnerSuhttleExtend) this.shuttleProtocol.getExtend(); + boolean res = this.shuttleProtocol.getMode() == 0 + || !this.shuttleProtocol.getErrorCode().equals("0") + || extend.getSuspendState() == 1 + ; + return res; } @Override @@ -1094,9 +1129,9 @@ } // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� - // 灏濊瘯100娆� + // 灏濊瘯10娆� JSONObject result = null; - for (int i = 0; i < 100; i++) { + for (int i = 0; i < 10; i++) { result = getRequestBody(requestType, taskId); if (result == null) { try { @@ -1111,6 +1146,22 @@ return result;//杩斿洖Body缁撴灉闆� } + private void requestCommandAsync(NyShuttleHttpCommand httpCommand) throws IOException { + if (this.socket == null) { + return; + } + + //鍘嬬缉鏁版嵁鍖� + JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand)); + data.remove("nodes"); + + // 鑾峰彇杈撳嚭娴� + OutputStreamWriter writer = new OutputStreamWriter(this.socket.getOutputStream()); + writer.write(JSON.toJSONString(data) + "\r\n"); + writer.flush(); +// System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand)); + } + private JSONObject filterBodyData(JSONObject data) { Object response = data.get("response"); if (response == null) { -- Gitblit v1.9.1