Skip to content

Commit 7e47e4d

Browse files
authored
Merge pull request TooTallNate#1407 from TooTallNate/receive-buffer-size
2 parents 1f842a6 + f625a1a commit 7e47e4d

File tree

4 files changed

+49
-8
lines changed

4 files changed

+49
-8
lines changed

‎src/main/java/org/java_websocket/AbstractWebSocket.java‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,18 @@ public abstract class AbstractWebSocket extends WebSocketAdapter{
102102
*/
103103
privatefinalObjectsyncConnectionLost = newObject();
104104

105+
/**
106+
* TCP receive buffer size that will be used for sockets (zero means use system default)
107+
*
108+
* @since 1.5.7
109+
*/
110+
privateintreceiveBufferSize = 0;
111+
112+
/**
113+
* Used for internal buffer allocations when the socket buffer size is not specified.
114+
*/
115+
protectedstaticintDEFAULT_READ_BUFFER_SIZE = 65536;
116+
105117
/**
106118
* Get the interval checking for lost connections Default is 60 seconds
107119
*
@@ -336,4 +348,29 @@ public boolean isDaemon(){
336348
publicvoidsetDaemon(booleandaemon){
337349
this.daemon = daemon;
338350
}
351+
352+
/**
353+
* Returns the TCP receive buffer size that will be used for sockets (or zero, if not explicitly set).
354+
* @see java.net.Socket#setReceiveBufferSize(int)
355+
*
356+
* @since 1.5.7
357+
*/
358+
publicintgetReceiveBufferSize(){
359+
returnreceiveBufferSize;
360+
}
361+
362+
/**
363+
* Sets the TCP receive buffer size that will be used for sockets.
364+
* If this is not explicitly set (or set to zero), the system default is used.
365+
* @see java.net.Socket#setReceiveBufferSize(int)
366+
*
367+
* @since 1.5.7
368+
*/
369+
publicvoidsetReceiveBufferSize(intreceiveBufferSize){
370+
if (receiveBufferSize < 0){
371+
thrownewIllegalArgumentException("buffer size < 0");
372+
}
373+
this.receiveBufferSize = receiveBufferSize;
374+
}
375+
339376
}

‎src/main/java/org/java_websocket/WebSocketImpl.java‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,6 @@ public class WebSocketImpl implements WebSocket{
8585
*/
8686
publicstaticfinalintDEFAULT_WSS_PORT = 443;
8787

88-
/**
89-
* Initial buffer size
90-
*/
91-
publicstaticfinalintRCVBUF = 16384;
92-
9388
/**
9489
* Logger instance
9590
*

‎src/main/java/org/java_websocket/client/WebSocketClient.java‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,10 @@ public void run(){
481481

482482
socket.setTcpNoDelay(isTcpNoDelay());
483483
socket.setReuseAddress(isReuseAddr());
484+
intreceiveBufferSize = getReceiveBufferSize();
485+
if (receiveBufferSize > 0){
486+
socket.setReceiveBufferSize(receiveBufferSize);
487+
}
484488

485489
if (!socket.isConnected()){
486490
InetSocketAddressaddr = dnsResolver == null ? InetSocketAddress.createUnresolved(uri.getHost(), getPort()) : newInetSocketAddress(dnsResolver.resolve(uri), this.getPort());
@@ -531,7 +535,8 @@ public void run(){
531535
writeThread.setDaemon(isDaemon());
532536
writeThread.start();
533537

534-
byte[] rawbuffer = newbyte[WebSocketImpl.RCVBUF];
538+
intreceiveBufferSize = getReceiveBufferSize();
539+
byte[] rawbuffer = newbyte[receiveBufferSize > 0 ? receiveBufferSize : DEFAULT_READ_BUFFER_SIZE];
535540
intreadBytes;
536541

537542
try{

‎src/main/java/org/java_websocket/server/WebSocketServer.java‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,10 @@ private boolean doSetupSelectorAndServerThread(){
578578
server = ServerSocketChannel.open();
579579
server.configureBlocking(false);
580580
ServerSocketsocket = server.socket();
581-
socket.setReceiveBufferSize(WebSocketImpl.RCVBUF);
581+
intreceiveBufferSize = getReceiveBufferSize();
582+
if (receiveBufferSize > 0){
583+
socket.setReceiveBufferSize(receiveBufferSize);
584+
}
582585
socket.setReuseAddress(isReuseAddr());
583586
socket.bind(address, getMaxPendingConnections());
584587
selector = Selector.open();
@@ -655,7 +658,8 @@ protected void releaseBuffers(WebSocket c) throws InterruptedException{
655658
}
656659

657660
publicByteBuffercreateBuffer(){
658-
returnByteBuffer.allocate(WebSocketImpl.RCVBUF);
661+
intreceiveBufferSize = getReceiveBufferSize();
662+
returnByteBuffer.allocate(receiveBufferSize > 0 ? receiveBufferSize : DEFAULT_READ_BUFFER_SIZE);
659663
}
660664

661665
protectedvoidqueue(WebSocketImplws) throwsInterruptedException{

0 commit comments

Comments
(0)