Author: markt
Date: Mon Dec 24 11:19:05 2012
New Revision: 1425635
URL: http://svn.apache.org/viewvc?rev=1425635&view=rev
Log:
Make the read buffer size configurable
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/WsConfigListener.java
tomcat/trunk/webapps/examples/WEB-INF/web.xml
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java?rev=1425635&r1=1425634&r2=1425635&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java Mon
Dec 24 11:19:05 2012
@@ -62,6 +62,7 @@ public class ServerContainerImpl extends
private Map<String,ServerEndpointConfiguration> configMap = new
ConcurrentHashMap<>();
private Map<String,Class<?>> pojoMap = new ConcurrentHashMap<>();
private Map<Class<?>,PojoMethodMapping> pojoMethodMap = new
ConcurrentHashMap<>();
+ private volatile int readBufferSize = 8192;
private ServerContainerImpl() {
@@ -165,4 +166,16 @@ public class ServerContainerImpl extends
throw new IllegalStateException(sm.getString(
"serverContainer.missingEndpoint", servletPath));
}
+
+
+
+ public int getReadBufferSize() {
+ return readBufferSize;
+ }
+
+
+
+ public void setReadBufferSize(int readBufferSize) {
+ this.readBufferSize = readBufferSize;
+ }
}
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java?rev=1425635&r1=1425634&r2=1425635&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java Mon Dec 24
11:19:05 2012
@@ -66,8 +66,12 @@ public class WsFrame {
public WsFrame(ServletInputStream sis, WsSession wsSession) {
this.sis = sis;
this.wsSession = wsSession;
- inputBuffer = new byte[8192];
- messageBuffer = ByteBuffer.allocate(8192);
+
+ int readBufferSize =
+ ServerContainerImpl.getServerContainer().getReadBufferSize();
+
+ inputBuffer = new byte[readBufferSize];
+ messageBuffer = ByteBuffer.allocate(readBufferSize);
}
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java?rev=1425635&r1=1425634&r2=1425635&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java Mon
Dec 24 11:19:05 2012
@@ -59,18 +59,20 @@ public class WsProtocolHandler implement
} catch (IOException e) {
throw new IllegalStateException(e);
}
- WsFrame wsFrame = new WsFrame(sis, wsSession);
- sis.setReadListener(new WsReadListener(this, wsFrame, wsSession));
- WsRemoteEndpoint wsRemoteEndpoint =
- new WsRemoteEndpoint(wsSession, sos);
- wsSession.setRemote(wsRemoteEndpoint);
- sos.setWriteListener(new WsWriteListener(this, wsRemoteEndpoint));
// Need to call onOpen using the web application's class loader
+ // Create the frame using the application's class loader so it can pick
+ // up application specific config from the ServerContainerImpl
Thread t = Thread.currentThread();
ClassLoader cl = t.getContextClassLoader();
t.setContextClassLoader(applicationClassLoader);
try {
+ WsFrame wsFrame = new WsFrame(sis, wsSession);
+ sis.setReadListener(new WsReadListener(this, wsFrame, wsSession));
+ WsRemoteEndpoint wsRemoteEndpoint =
+ new WsRemoteEndpoint(wsSession, sos);
+ wsSession.setRemote(wsRemoteEndpoint);
+ sos.setWriteListener(new WsWriteListener(this, wsRemoteEndpoint));
ep.onOpen(wsSession, endpointConfig);
} finally {
t.setContextClassLoader(cl);
Modified:
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/WsConfigListener.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/WsConfigListener.java?rev=1425635&r1=1425634&r2=1425635&view=diff
==============================================================================
---
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/WsConfigListener.java
(original)
+++
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/WsConfigListener.java
Mon Dec 24 11:19:05 2012
@@ -16,6 +16,7 @@
*/
package websocket.echo;
+import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@@ -30,13 +31,20 @@ public class WsConfigListener implements
@Override
public void contextInitialized(ServletContextEvent sce) {
ServerContainerImpl sc = ServerContainerImpl.getServerContainer();
- sc.setServletContext(sce.getServletContext());
+ ServletContext servletContext = sce.getServletContext();
+ sc.setServletContext(servletContext);
try {
sc.publishServer(EchoEndpoint.class, "/websocket/echoProgrammatic",
DefaultServerConfiguration.class);
} catch (DeploymentException e) {
throw new IllegalStateException(e);
}
+
+ String strReadBufferSize =
+ servletContext.getInitParameter("wsReadBufferSize");
+ if (strReadBufferSize != null) {
+
sc.setReadBufferSize(Integer.valueOf(strReadBufferSize).intValue());
+ }
}
Modified: tomcat/trunk/webapps/examples/WEB-INF/web.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/web.xml?rev=1425635&r1=1425634&r2=1425635&view=diff
==============================================================================
--- tomcat/trunk/webapps/examples/WEB-INF/web.xml (original)
+++ tomcat/trunk/webapps/examples/WEB-INF/web.xml Mon Dec 24 11:19:05 2012
@@ -354,4 +354,10 @@
<url-pattern>/async/stockticker</url-pattern>
</servlet-mapping>
+ <!-- Uncomment the section below to increase the WebSocket read buffer -->
+ <!-- size for the Autobahn testsuite. -->
+ <context-param>
+ <param-name>wsReadBufferSize</param-name>
+ <param-value>102400</param-value>
+ </context-param>
</web-app>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]