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);