1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.example.spdy.server;
17
18 import io.netty.bootstrap.ServerBootstrap;
19 import io.netty.channel.Channel;
20 import io.netty.channel.ChannelOption;
21 import io.netty.channel.EventLoopGroup;
22 import io.netty.channel.MultiThreadIoEventLoopGroup;
23 import io.netty.channel.nio.NioIoHandler;
24 import io.netty.channel.socket.nio.NioServerSocketChannel;
25 import io.netty.handler.logging.LogLevel;
26 import io.netty.handler.logging.LoggingHandler;
27 import io.netty.handler.ssl.ApplicationProtocolConfig;
28 import io.netty.handler.ssl.ApplicationProtocolConfig.Protocol;
29 import io.netty.handler.ssl.ApplicationProtocolConfig.SelectedListenerFailureBehavior;
30 import io.netty.handler.ssl.ApplicationProtocolConfig.SelectorFailureBehavior;
31 import io.netty.handler.ssl.ApplicationProtocolNames;
32 import io.netty.handler.ssl.SslContext;
33 import io.netty.handler.ssl.SslContextBuilder;
34 import io.netty.handler.ssl.util.SelfSignedCertificate;
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public final class SpdyServer {
55
56 static final int PORT = Integer.parseInt(System.getProperty("port", "8443"));
57
58 public static void main(String[] args) throws Exception {
59
60 SelfSignedCertificate ssc = new SelfSignedCertificate();
61 SslContext sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey())
62 .applicationProtocolConfig(new ApplicationProtocolConfig(
63 Protocol.NPN,
64
65 SelectorFailureBehavior.NO_ADVERTISE,
66
67 SelectedListenerFailureBehavior.ACCEPT,
68 ApplicationProtocolNames.SPDY_3_1,
69 ApplicationProtocolNames.HTTP_1_1))
70 .build();
71
72
73 EventLoopGroup bossGroup = new MultiThreadIoEventLoopGroup(1, NioIoHandler.newFactory());
74 EventLoopGroup workerGroup = new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory());
75 try {
76 ServerBootstrap b = new ServerBootstrap();
77 b.option(ChannelOption.SO_BACKLOG, 1024);
78 b.group(bossGroup, workerGroup)
79 .channel(NioServerSocketChannel.class)
80 .handler(new LoggingHandler(LogLevel.INFO))
81 .childHandler(new SpdyServerInitializer(sslCtx));
82
83 Channel ch = b.bind(PORT).sync().channel();
84
85 System.err.println("Open your SPDY-enabled web browser and navigate to https://127.0.0.1:" + PORT + '/');
86 System.err.println("If using Chrome browser, check your SPDY sessions at chrome://net-internals/#spdy");
87
88 ch.closeFuture().sync();
89 } finally {
90 bossGroup.shutdownGracefully();
91 workerGroup.shutdownGracefully();
92 }
93 }
94 }