@@ -443,22 +443,6 @@ export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate
443443export CATALINA_OPTS="$CATALINA_OPTS -Dorg.apache.coyote.http2.Http2Protocol.jmxMetrics=true"
444444</pre >
445445
446- <h3 >Tomcat vs WildFly Performance Comparison</h3 >
447-
448- <p >Real-world performance comparison between Tomcat 11 and WildFly 32 for OpenAPI + HTTP/2:</p >
449-
450- <table border =" 1" >
451- <tr ><th >Performance Metric</th ><th >Tomcat 11 + HTTP/2</th ><th >WildFly 32 + HTTP/2</th ><th >Improvement</th ></tr >
452- <tr ><td ><strong >OpenAPI Spec Generation (5MB)</strong ></td ><td >1.4s</td ><td >1.8s</td ><td >22% faster</td ></tr >
453- <tr ><td ><strong >Swagger UI Load Time</strong ></td ><td >2.1s</td ><td >2.8s</td ><td >25% faster</td ></tr >
454- <tr ><td ><strong >Large JSON Response (50MB)</strong ></td ><td >4.2s</td ><td >5.2s</td ><td >19% faster</td ></tr >
455- <tr ><td ><strong >Concurrent Streams (200 streams)</strong ></td ><td >6.8s</td ><td >9.1s</td ><td >25% faster</td ></tr >
456- <tr ><td ><strong >Memory Usage (baseline)</strong ></td ><td >480MB heap</td ><td >720MB heap</td ><td >33% less memory</td ></tr >
457- <tr ><td ><strong >Connection Count</strong ></td ><td >8-12 connections</td ><td >12-18 connections</td ><td >25% fewer</td ></tr >
458- <tr ><td ><strong >Cold Start Time</strong ></td ><td >3.2s</td ><td >8.7s</td ><td >63% faster startup</td ></tr >
459- <tr ><td ><strong >Configuration Time</strong ></td ><td >2-3 minutes</td ><td >15-20 minutes</td ><td >83% faster setup</td ></tr >
460- </table >
461-
462446<h3 >Advanced Tomcat HTTP/2 Optimizations</h3 >
463447
464448<p >Advanced configuration patterns specific to Tomcat for maximum performance:</p >
@@ -628,36 +612,6 @@ openapi.security.http2.tlsSessionCache=300 # 5-minute TLS session cache
628612openapi.security.http2.alpnNegotiation=true # Secure protocol negotiation
629613</pre >
630614
631- <h3 >API Rate Limiting with HTTP/2</h3 >
632-
633- <p >HTTP/2 flow control provides natural rate limiting capabilities:</p >
634-
635- <pre >
636- // HTTP/2 aware rate limiting
637- @Component
638- public class Http2RateLimitingInterceptor implements HandlerInterceptor {
639-
640- @Override
641- public boolean preHandle(HttpServletRequest request,
642- HttpServletResponse response,
643- Object handler) throws Exception {
644-
645- if (isHttp2Request(request)) {
646- // HTTP/2 flow control provides built-in backpressure
647- return handleHttp2RateLimit(request, response);
648- } else {
649- // Traditional HTTP/1.1 rate limiting
650- return handleHttp1RateLimit(request, response);
651- }
652- }
653-
654- private boolean isHttp2Request(HttpServletRequest request) {
655- return "HTTP/2.0".equals(request.getProtocol()) ||
656- "2.0".equals(request.getHeader("X-HTTP-Version"));
657- }
658- }
659- </pre >
660-
661615<h2 >Monitoring and Observability</h2 >
662616
663617<h3 >HTTP/2 + OpenAPI Metrics</h3 >
0 commit comments