钟日健
2022-05-19 de31e91aa2f38a717f2d4640a3197580ec1807a7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//package org.springblade.modules.nettyServer;
//
//import io.netty.bootstrap.ServerBootstrap;
//import io.netty.channel.*;
//import io.netty.channel.nio.NioEventLoopGroup;
//import io.netty.channel.socket.ServerSocketChannel;
//import io.netty.channel.socket.SocketChannel;
//import io.netty.channel.socket.nio.NioServerSocketChannel;
//
//
//public class Server {
//    private int port;
//    private ServerSocketChannel serverSocketChannel;
//
//    public Server(int port){
//        this.port = port;
//        bind();
//    }
//
//    private void bind() {
//        Thread thread = new Thread(new Runnable() {
//            @Override
//            public void run() {
//                //服务端要建立两个group,一个负责接收客户端的连接,一个负责处理数据传输
//                //连接处理group
//                EventLoopGroup boss = new NioEventLoopGroup();
//                //事件处理group
//                EventLoopGroup worker = new NioEventLoopGroup();
//                ServerBootstrap bootstrap = new ServerBootstrap();
//                // 绑定处理group
//                bootstrap.group(boss, worker).channel(NioServerSocketChannel.class)
//                    //保持连接数
//                    .option(ChannelOption.SO_BACKLOG, 1024)
//                    //有数据立即发送
//                    .option(ChannelOption.TCP_NODELAY, true)
//                    //保持连接
//                    .childOption(ChannelOption.SO_KEEPALIVE, true)
//                    //处理新连接
//                    .childHandler(new ChannelInitializer<SocketChannel>() {
//                        @Override
//                        protected void initChannel(SocketChannel sc) throws Exception {
//                            // 增加任务处理
//                            ChannelPipeline p = sc.pipeline();
//                            p.addLast(
////                                        //使用了netty自带的编码器和解码器
////                                        new StringDecoder(),
////                                        new StringEncoder(),
//                                //心跳检测,读超时,写超时,读写超时
//                                //new IdleStateHandler(5, 0, 0, TimeUnit.SECONDS),
//                                //自定义的处理器
//                                new ServerHandler());
//                        }
//                    });
//
//                //绑定端口,同步等待成功
//                ChannelFuture future;
//                try {
//                    future = bootstrap.bind(port).sync();
//                    if (future.isSuccess()) {
//                        serverSocketChannel = (ServerSocketChannel) future.channel();
//                        System.out.println("服务端启动成功,端口:"+port);
//                    } else {
//                        System.out.println("服务端启动失败!");
//                    }
//
//                    //等待服务监听端口关闭,就是由于这里会将线程阻塞,导致无法发送信息,所以我这里开了线程
//                    future.channel().closeFuture().sync();
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//                finally {
//                    //优雅地退出,释放线程池资源
//                    boss.shutdownGracefully();
//                    worker.shutdownGracefully();
//                }
//            }
//        });
//        thread.start();
//    }
//
//    public void sendMessage(Object msg){
//        if(serverSocketChannel != null){
//            serverSocketChannel.writeAndFlush(msg);
//        }
//    }
//}