1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty5.example.http.websocketx.server;
17
18 import io.netty5.bootstrap.ServerBootstrap;
19 import io.netty5.channel.Channel;
20 import io.netty5.channel.EventLoopGroup;
21 import io.netty5.channel.MultithreadEventLoopGroup;
22 import io.netty5.channel.nio.NioHandler;
23 import io.netty5.channel.socket.nio.NioServerSocketChannel;
24 import io.netty5.handler.logging.LogLevel;
25 import io.netty5.handler.logging.LoggingHandler;
26 import io.netty5.handler.ssl.SslContext;
27 import io.netty5.handler.ssl.SslContextBuilder;
28 import io.netty5.handler.ssl.util.SelfSignedCertificate;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public final class WebSocketServer {
50
51 static final boolean SSL = System.getProperty("ssl") != null;
52 static final int PORT = Integer.parseInt(System.getProperty("port", SSL? "8443" : "8080"));
53
54 public static void main(String[] args) throws Exception {
55
56 final SslContext sslCtx;
57 if (SSL) {
58 SelfSignedCertificate ssc = new SelfSignedCertificate();
59 sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey()).build();
60 } else {
61 sslCtx = null;
62 }
63
64 EventLoopGroup bossGroup = new MultithreadEventLoopGroup(1, NioHandler.newFactory());
65 EventLoopGroup workerGroup = new MultithreadEventLoopGroup(NioHandler.newFactory());
66 try {
67 ServerBootstrap b = new ServerBootstrap();
68 b.group(bossGroup, workerGroup)
69 .channel(NioServerSocketChannel.class)
70 .handler(new LoggingHandler(LogLevel.INFO))
71 .childHandler(new WebSocketServerInitializer(sslCtx));
72
73 Channel ch = b.bind(PORT).asStage().get();
74
75 System.out.println("Open your web browser and navigate to " +
76 (SSL? "https" : "http") + "://127.0.0.1:" + PORT + '/');
77
78 ch.closeFuture().asStage().sync();
79 } finally {
80 bossGroup.shutdownGracefully();
81 workerGroup.shutdownGracefully();
82 }
83 }
84 }