修复ws数据包过大粘包的bug
This commit is contained in:
@@ -346,9 +346,15 @@ public final class WebSocketPacket {
|
|||||||
*/
|
*/
|
||||||
boolean receiveBody(WebSocket webSocket, ByteBuffer readBuffer) {
|
boolean receiveBody(WebSocket webSocket, ByteBuffer readBuffer) {
|
||||||
int need = receiveLength - receiveCount;
|
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);
|
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;
|
return over;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -438,6 +444,8 @@ public final class WebSocketPacket {
|
|||||||
}
|
}
|
||||||
if (lengthCode == 0x7E) {//0x7E=126
|
if (lengthCode == 0x7E) {//0x7E=126
|
||||||
length = (int) buffer.getChar();
|
length = (int) buffer.getChar();
|
||||||
|
} else if (lengthCode == 0x7F) {//0x7E=127
|
||||||
|
length = (int) buffer.getLong();
|
||||||
} else {
|
} else {
|
||||||
length = buffer.getInt();
|
length = buffer.getInt();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,7 +115,11 @@ class WebSocketRunner implements Runnable {
|
|||||||
webSocket.onOccurException(e, null);
|
webSocket.onOccurException(e, null);
|
||||||
}
|
}
|
||||||
//继续监听消息
|
//继续监听消息
|
||||||
readBuffer.clear();
|
if (readBuffer.hasRemaining()) { //exBuffers缓存了
|
||||||
|
readBuffer = context.pollBuffer();
|
||||||
|
} else {
|
||||||
|
readBuffer.clear();
|
||||||
|
}
|
||||||
if (halfBytes.getValue() != null) {
|
if (halfBytes.getValue() != null) {
|
||||||
readBuffer.put(halfBytes.getValue());
|
readBuffer.put(halfBytes.getValue());
|
||||||
halfBytes.setValue(null);
|
halfBytes.setValue(null);
|
||||||
|
|||||||
Reference in New Issue
Block a user