修复ws数据包过大粘包的bug

This commit is contained in:
Redkale
2019-03-14 12:32:07 +08:00
parent 8ad919f952
commit e101b79472
2 changed files with 15 additions and 3 deletions

View File

@@ -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();
}

View File

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