修复ws数据包过大粘包的bug
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user