users@grizzly.java.net

Re: Using SPDY with Grizzly

From: Steve Curtis <stevo.curtis_at_googlemail.com>
Date: Mon, 13 Jun 2016 10:36:52 +0100

Hi Ryan,

I was running it with Open JDK 1.7.0_101

Since it's a Windows machine I'm developing on I used the Azul provided
OpenJDK build at http://www.azul.com/downloads/zulu/zulu-windows/

Cheers

On 13 June 2016 at 02:59, Ryan Lubke <ryan.lubke_at_oracle.com> wrote:

> Hi Steve,
>
> Do you recall the exact version of the Open JDK you tested with? The NPN
> code is pretty sensitive to the version of the runtime. NOTE: It won't
> work at all with the Oracle JDK.
>
> Steve Curtis <stevo.curtis_at_googlemail.com>
> June 12, 2016 at 16:22
>
> I’ve inherited a client-server application that creates a significant
> amount of asynchronous ajax calls from the front end. We were using Simple
> Framework for our backend and I have now swapped in Grizzly with the
> intention of making use of SPDY protocol to avoid the max 6 browser
> connections we are seeing at the moment.
>
>
>
> I have the application standing up fine, but it still seems to use
> standard HTTP 1.1 over SSL and not SPDY.
>
>
>
> The code I’ve written is:
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> *public void runServer(int port) throws IOException{ logger.info("starting
> grizzly framework server on port {}", port); ResourceConfig resourceConfig
> = new ResourceConfig(JerseyResource.class); uri =
> UriBuilder.fromUri("https://localhost/
> <https://localhost/>").port(port).build(); server =
> GrizzlyHttpServerFactory.createHttpServer(uri, resourceConfig, true,
> createSSLContextConfigurator()); listener =
> server.getListeners().iterator().next(); listener.setSecure(true);
> NIOTransport nioTransport = TCPNIOTransportBuilder.newInstance()
> .setReuseAddress(true) .setIOStrategy(WorkerThreadIOStrategy.getInstance())
> .setSelectorThreadPoolConfig(ThreadPoolConfig.defaultConfig().setCorePoolSize(2).setMaxPoolSize(4))
> .setWorkerThreadPoolConfig(ThreadPoolConfig.defaultConfig().setCorePoolSize(3).setMaxPoolSize(20))
> .build(); listener.setTransport((TCPNIOTransport)nioTransport); SpdyAddOn
> spdyAddOn = new SpdyAddOn(SpdyMode.NPN); listener.registerAddOn(spdyAddOn);
> final ServerConfiguration serverConfiguration =
> server.getServerConfiguration(); serverConfiguration.addHttpHandler(new
> HttpHandler() { public void service(Request request, Response response)
> throws Exception { long startTime = new Date().getTime(); // Put a short
> sleep in here so can see if requests queue up from browser
> Thread.currentThread().sleep(500); // Get SPDY stream if it exists final
> SpdyStream spdyStream = (SpdyStream)
> request.getAttribute(SpdyStream.SPDY_STREAM_ATTRIBUTE); // if spdy stream
> is null it is not a SPDY based request if (spdyStream != null) {
> logger.info("found a SPDY stream"); } else { logger.info("no SPDY stream
> available"); } final SimpleDateFormat format = new SimpleDateFormat("EEE,
> dd MMM yyyy HH:mm:ss zzz", Locale.UK); final String date =
> format.format(new Date(System.currentTimeMillis()));
> response.setContentType("text/plain");
> response.setContentLength(date.length()); response.getWriter().write(date);
> logger.info("processed request in {} ms", new Date().getTime() -
> startTime); } } ); server.start(); logger.info("bootstrap of grizzly
> framework server complete, running on {}", uri);}protected
> SSLEngineConfigurator createSSLContextConfigurator() throws
> MalformedURLException{ SSLContextConfigurator sslContextConfigurator = new
> SSLContextConfigurator(); ClassLoader classLoader =
> getClass().getClassLoader();
> sslContextConfigurator.setKeyStoreFile(classLoader.getResource("keystore.jks").getFile().toString());
> sslContextConfigurator.setKeyStorePass("changeit");
> sslContextConfigurator.validateConfiguration(true); SSLEngineConfigurator
> result = new SSLEngineConfigurator(
> sslContextConfigurator.createSSLContext(), false, false, false);
> result.setClientMode(false); return result;*
>
> *}*
>
>
>
> The code is hosted on GitHub at
> https://github.com/stevocurtis/public-development/blob/master/subprojects/playpens/java-playpen/web/grizzly-framework-playpen/src/main/java/com/fenixinfotech/grizzly/framework/playpen/JerseyGrizzlyFrameworkServer.java
>
>
>
> Notes:
>
>
>
> 1. I’ve run this against both open jdk 7 and oracle jdk 7.
>
> 2. I’ve tried bootstrapping with both the
> grizzly-npn-bootstrap-1.0.jar and grizzly-npn-bootstrap-1.2.jar files.
>
> 3. You can see the dependencies in the pom but they are:
>
>
>
> jersey-container-grizzly2-http 2.35
>
> grizzly-http2 2.3.25
>
> grizzly-http-server 2.3.25
>
> grizzly-spdy 2.3.25
>
> grizzly-npn-bootstrap 1.2
>
>
>
> I’m wondering is there anything else I need to do to “trigger” initiation
> of a SPDY protocol? Setting headers maybe.
>
>
>
> Thanks in advance,
>
>
>
> Steve
>
>
>