zsh_root
2024-01-02 7b595546af704983dbafcd0d385c8768ddacefc2
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package Netty;
import java.util.Vector;
import java.util.concurrent.TimeUnit;
import PbuliClass.Systems;
import home.Open_soft_dialog;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.string.StringEncoder;
import io.netty.handler.timeout.IdleStateHandler;
import rtkanchor.Dell_jizhan;
import rtkanchor.Jizhan;
 
public class NettyServer {    
    static Vector<ChannelFuture> chnvec=new Vector<ChannelFuture>();
    //¼àÌý¶Ë¿ÚµÄ¼¯ºÏ
    static Vector<String> portvec=new Vector<String>();
    static {
        String port12=Systems.getTcpreceiveport();
        portvec.add(port12);
        if(Systems.isBiandianzhan()) {
            Vector<Jizhan> jizhan_vector=Dell_jizhan.getJizhan_vector();
            int size=jizhan_vector.size();
            for(int i=0;i<size;i++) {
                String port=jizhan_vector.get(i).getPort();
                portvec.add(port);
            }
        }
    }
 
    public static void server() throws Exception {
 
 
        //´´½¨BossGroup ºÍ WorkerGroup
        //˵Ã÷
        //1. ´´½¨Á½¸öÏß³Ì×é bossGroup ºÍ workerGroup
        //2. bossGroup Ö»ÊÇ´¦ÀíÁ¬½ÓÇëÇó , ÕæÕýµÄºÍ¿Í»§¶ËÒµÎñ´¦Àí£¬»á½»¸ø workerGroupÍê³É
        //3. Á½¸ö¶¼ÊÇÎÞÏÞÑ­»·
        //4. bossGroup ºÍ workerGroup º¬ÓеÄ×ÓÏß³Ì(NioEventLoop)µÄ¸öÊý
        //   Ä¬ÈÏʵ¼Ê cpuºËÊý * 2
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup(); //8
 
        try {
            //´´½¨·þÎñÆ÷¶ËµÄÆô¶¯¶ÔÏó£¬ÅäÖòÎÊý
            ServerBootstrap bootstrap = new ServerBootstrap();
 
            //ʹÓÃÁ´Ê½±à³ÌÀ´½øÐÐÉèÖÃ
            bootstrap.group(bossGroup, workerGroup) //ÉèÖÃÁ½¸öÏß³Ì×é
            .channel(NioServerSocketChannel.class) //ʹÓÃNioServerSocketChannel ×÷Ϊ·þÎñÆ÷µÄͨµÀʵÏÖ
            .option(ChannelOption.SO_BACKLOG,1024) // ÉèÖÃÏ̶߳ÓÁеȴýÁ¬½ÓµÄ¸öÊý
            //            .option(ChannelOption.SO_RCVBUF,500) // ÕâÊǽÓÊÕ»º³å´óС
            .childOption(ChannelOption.SO_KEEPALIVE, true) //ÉèÖñ£³Ö»î¶¯Á¬½Ó״̬
 
            /*µ±ÔÚ¿Í»§¶ËºÍ·þÎñ¶ËµÄChannelInitializer
             * ¼Ì³ÐÀàÖÐÌí¼Ó.addLast(¡°logging¡±, new LoggingHandler(LogLevel.INFO))
             * ÕâÐдúÂëʱNetty¾Í»áÒÔ¸ø¶¨µÄÈÕÖ¾¼¶±ð´òÓ¡³öLoggingHandlerÖеÄÈÕÖ¾¡£ ¿ÉÒÔ¶ÔÈëÕ¾\
             * ³öվʼþ½øÐÐÈÕÖ¾¼Ç¼£¬´Ó¶ø·½±ãÎÒÃǽøÐÐÎÊÌâÅŲ顣 */
 
            //            .handler(new LoggingHandler(LogLevel.INFO)) 
 
            // ¸øÎÒÃǵÄworkerGroup µÄ EventLoop ¶ÔÓ¦µÄ¹ÜµÀÉèÖô¦ÀíÆ÷
            .childHandler(new ChannelInitializer<SocketChannel>() {// ×îºó°ó¶¨I/OʼþµÄ´¦ÀíÀà                
                public  void initChannel(SocketChannel ch) throws Exception {
                    ChannelPipeline pipeline=ch.pipeline();                    
                    /**
                     * readerIdleTime ¶à³¤Ê±¼äûÓжÁ£¬¾Í»á·¢ËÍÒ»¸öÐÄÌø¼ì²â°ü¼ì²âÊÇ·ñÁ¬½Ó
                     * writerIdleTime ¶à³¤Ê±¼äûÓÐд£¬¾Í»á·¢ËÍÒ»¸öÐÄÌø¼ì²â°ü¼ì²âÊÇ·ñÁ¬½Ó
                     * allIdleTime ¶à³¤Ê±¼äûÓжÁ/д£¬¾Í»á·¢ËÍÒ»¸öÐÄÌø¼ì²â°ü¼ì²âÊÇ·ñÁ¬½Ó
                     * */
                    pipeline.addLast("decoder", new StringEncoder()); //Ïòpipeline¼ÓÈë±àÂëÆ÷
                    pipeline.addLast("encoder", new StringEncoder()); //Ïòpipeline¼ÓÈë½âÂëÆ÷
                    pipeline.addLast(new IdleStateHandler(120,120,120,TimeUnit.SECONDS));
                    pipeline.addLast(new NettyServerHandler());//
                    pipeline.addLast(new GroupChatServerHandler());
 
                }
            }); 
 
 
 
            //°ó¶¨Ò»¸ö¶Ë¿Ú²¢ÇÒͬ²½, Éú³ÉÁËÒ»¸ö ChannelFuture ¶ÔÏó
            //Æô¶¯·þÎñÆ÷(²¢°ó¶¨¶Ë¿Ú)
            for(int i=0;i<portvec.size();i++) {
                if(portvec.get(i)==null) {
                    continue;
                }
                int portint=Integer.parseInt(portvec.get(i));
                Open_soft_dialog.addara(portint+"TCP¶Ë¿Ú¼àÌýÆô¶¯");
                ChannelFuture cf = bootstrap.bind(portint).sync();
                cf.channel().closeFuture().addListener(new ChannelFutureListener() {//¸øcf ×¢²á¼àÌýÆ÷£¬¼à¿ØÎÒÃǹØÐĵÄʼþ
                    public void operationComplete(ChannelFuture future) throws Exception {
                        cf.channel().close();//¶Ô¹Ø±ÕͨµÀ½øÐмàÌý£¬µ±ÓйرÕͨµÀʼþµÄʱºòÈ¥´¦Àí
                    }
                });
 
            }
 
 
        }finally {
            //bossGroup.shutdownGracefully();//¹Ø±Õ
            //workerGroup.shutdownGracefully();
            //System.out.println("·þÎñÆ÷ÓÅÑŵÄÊÍ·ÅÁËÏß³Ì×ÊÔ´...");
        }
 
    }
 
 
}