mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-10-14 16:18:13 +00:00
del[ws]: websocket packet fragmentation
This commit is contained in:
1 parent
7ba4948817
commit
06573892fb
1 file changed
-16
@@ -43,26 +43,11 @@ public class WebSocketCodecHandler extends MessageToMessageCodec<WebSocketFrame,
|
|||||||
@Override
|
@Override
|
||||||
protected void decode(ChannelHandlerContext channelHandlerContext, WebSocketFrame webSocketFrame, List<Object> list) {
|
protected void decode(ChannelHandlerContext channelHandlerContext, WebSocketFrame webSocketFrame, List<Object> list) {
|
||||||
ByteBuf in = webSocketFrame.content();
|
ByteBuf in = webSocketFrame.content();
|
||||||
|
|
||||||
// 不够读一个int
|
|
||||||
if (in.readableBytes() <= PacketService.PACKET_HEAD_LENGTH) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
in.markReaderIndex();
|
|
||||||
var length = in.readInt();
|
var length = in.readInt();
|
||||||
|
|
||||||
// 如果长度非法,则抛出异常断开连接,按照自己的使用场景指定合适的长度,防止客户端发送超大包占用带宽
|
// 如果长度非法,则抛出异常断开连接,按照自己的使用场景指定合适的长度,防止客户端发送超大包占用带宽
|
||||||
if (length < 0 || length > IOUtils.BYTES_PER_MB) {
|
if (length < 0 || length > IOUtils.BYTES_PER_MB) {
|
||||||
throw new IllegalArgumentException(StringUtils.format("illegal packet [length:{}]", length));
|
throw new IllegalArgumentException(StringUtils.format("illegal packet [length:{}]", length));
|
||||||
}
|
}
|
||||||
|
|
||||||
// ByteBuf里的数据太小
|
|
||||||
if (in.readableBytes() < length) {
|
|
||||||
in.resetReaderIndex();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var sliceByteBuf = in.readSlice(length);
|
var sliceByteBuf = in.readSlice(length);
|
||||||
var packetInfo = NetContext.getPacketService().read(sliceByteBuf);
|
var packetInfo = NetContext.getPacketService().read(sliceByteBuf);
|
||||||
list.add(packetInfo);
|
list.add(packetInfo);
|
||||||
@@ -71,7 +56,6 @@ public class WebSocketCodecHandler extends MessageToMessageCodec<WebSocketFrame,
|
|||||||
@Override
|
@Override
|
||||||
protected void encode(ChannelHandlerContext channelHandlerContext, EncodedPacketInfo out, List<Object> list) {
|
protected void encode(ChannelHandlerContext channelHandlerContext, EncodedPacketInfo out, List<Object> list) {
|
||||||
var byteBuf = channelHandlerContext.alloc().ioBuffer();
|
var byteBuf = channelHandlerContext.alloc().ioBuffer();
|
||||||
|
|
||||||
NetContext.getPacketService().write(byteBuf, out.getPacket(), out.getAttachment());
|
NetContext.getPacketService().write(byteBuf, out.getPacket(), out.getAttachment());
|
||||||
list.add(new BinaryWebSocketFrame(byteBuf));
|
list.add(new BinaryWebSocketFrame(byteBuf));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user