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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org