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("·þÎñÆ÷ÓÅÑŵÄÊÍ·ÅÁËÏß³Ì×ÊÔ´...");
|
}
|
|
}
|
|
|
}
|