From e101b794726e0111f8b51418716ce7f53a4f1067 Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Thu, 14 Mar 2019 12:32:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dws=E6=95=B0=E6=8D=AE=E5=8C=85?= =?UTF-8?q?=E8=BF=87=E5=A4=A7=E7=B2=98=E5=8C=85=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/net/http/WebSocketPacket.java | 12 ++++++++++-- src/org/redkale/net/http/WebSocketRunner.java | 6 +++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/org/redkale/net/http/WebSocketPacket.java b/src/org/redkale/net/http/WebSocketPacket.java index d2fbb3fd2..62e9ef497 100644 --- a/src/org/redkale/net/http/WebSocketPacket.java +++ b/src/org/redkale/net/http/WebSocketPacket.java @@ -346,9 +346,15 @@ public final class WebSocketPacket { */ boolean receiveBody(WebSocket webSocket, ByteBuffer readBuffer) { int need = receiveLength - receiveCount; - boolean over = readBuffer.remaining() >= need; + final int remain = readBuffer.remaining(); + boolean over = remain >= need; this.receiveBuffers = Utility.append(this.receiveBuffers, readBuffer); - if (over) parseReceiveMessage(webSocket, this.receiveBuffers); + if (over) { + this.receiveCount = this.receiveLength; + parseReceiveMessage(webSocket, this.receiveBuffers); + } else { + this.receiveCount += remain; + } return over; } @@ -438,6 +444,8 @@ public final class WebSocketPacket { } if (lengthCode == 0x7E) {//0x7E=126 length = (int) buffer.getChar(); + } else if (lengthCode == 0x7F) {//0x7E=127 + length = (int) buffer.getLong(); } else { length = buffer.getInt(); } diff --git a/src/org/redkale/net/http/WebSocketRunner.java b/src/org/redkale/net/http/WebSocketRunner.java index 85792a65e..ba757b50d 100644 --- a/src/org/redkale/net/http/WebSocketRunner.java +++ b/src/org/redkale/net/http/WebSocketRunner.java @@ -115,7 +115,11 @@ class WebSocketRunner implements Runnable { webSocket.onOccurException(e, null); } //继续监听消息 - readBuffer.clear(); + if (readBuffer.hasRemaining()) { //exBuffers缓存了 + readBuffer = context.pollBuffer(); + } else { + readBuffer.clear(); + } if (halfBytes.getValue() != null) { readBuffer.put(halfBytes.getValue()); halfBytes.setValue(null);