Merge pull request #4564 from SerCeMan/jetty-9.4.x
Improve performance of small websocket binary messages
This commit is contained in:
commit
636c6047ba
|
@ -51,7 +51,7 @@ public class BinaryWholeMessage extends SimpleBinaryMessage
|
|||
{
|
||||
super.finished = true;
|
||||
|
||||
byte[] data = out.toByteArray();
|
||||
byte[] data = (out == null) ? new byte[]{} : out.toByteArray();
|
||||
|
||||
DecoderFactory.Wrapper decoder = msgWrapper.getDecoder();
|
||||
Decoder.Binary<Object> binaryDecoder = (Binary<Object>)decoder.getDecoder();
|
||||
|
|
|
@ -18,25 +18,24 @@
|
|||
|
||||
package org.eclipse.jetty.websocket.common.message;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import org.eclipse.jetty.util.BufferUtil;
|
||||
import org.eclipse.jetty.util.ByteArrayOutputStream2;
|
||||
import org.eclipse.jetty.websocket.common.events.EventDriver;
|
||||
|
||||
public class SimpleBinaryMessage implements MessageAppender
|
||||
{
|
||||
private static final int BUFFER_SIZE = 65535;
|
||||
private final EventDriver onEvent;
|
||||
protected final ByteArrayOutputStream out;
|
||||
protected ByteArrayOutputStream2 out;
|
||||
private int size;
|
||||
protected boolean finished;
|
||||
|
||||
public SimpleBinaryMessage(EventDriver onEvent)
|
||||
{
|
||||
this.onEvent = onEvent;
|
||||
this.out = new ByteArrayOutputStream(BUFFER_SIZE);
|
||||
finished = false;
|
||||
}
|
||||
|
||||
|
@ -57,6 +56,8 @@ public class SimpleBinaryMessage implements MessageAppender
|
|||
onEvent.getPolicy().assertValidBinaryMessageSize(size + payload.remaining());
|
||||
size += payload.remaining();
|
||||
|
||||
if (out == null)
|
||||
out = isLast ? new ByteArrayOutputStream2(size) : new ByteArrayOutputStream2(BUFFER_SIZE);
|
||||
BufferUtil.writeTo(payload, out);
|
||||
}
|
||||
|
||||
|
@ -64,7 +65,13 @@ public class SimpleBinaryMessage implements MessageAppender
|
|||
public void messageComplete()
|
||||
{
|
||||
finished = true;
|
||||
byte[] data = out.toByteArray();
|
||||
byte[] data;
|
||||
if (out == null)
|
||||
data = new byte[]{};
|
||||
else if (out.getCount() == out.getBuf().length)
|
||||
data = out.getBuf();
|
||||
else
|
||||
data = out.toByteArray();
|
||||
onEvent.onBinaryMessage(data);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue