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

Reply via email to