70 lines
2.6 KiB
Java
70 lines
2.6 KiB
Java
package netty.chat.server;
|
|
|
|
import io.netty.bootstrap.ServerBootstrap;
|
|
import io.netty.buffer.Unpooled;
|
|
import io.netty.channel.ChannelFuture;
|
|
import io.netty.channel.ChannelInitializer;
|
|
import io.netty.channel.ChannelOption;
|
|
import io.netty.channel.EventLoopGroup;
|
|
import io.netty.channel.nio.NioEventLoopGroup;
|
|
import io.netty.channel.socket.SocketChannel;
|
|
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
|
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
|
|
import io.netty.handler.codec.string.StringDecoder;
|
|
import io.netty.handler.codec.string.StringEncoder;
|
|
import netty.chat.handler.DiscardServerHandler;
|
|
|
|
import java.nio.charset.Charset;
|
|
|
|
/**
|
|
* @description:
|
|
* @author: lld
|
|
* @version: 1.0
|
|
*/
|
|
public class DiscardServer {
|
|
|
|
private int port;
|
|
|
|
public DiscardServer(int port) {
|
|
this.port = port;
|
|
}
|
|
|
|
public void run() throws Exception {
|
|
EventLoopGroup bossGroup = new NioEventLoopGroup(1); //线程池
|
|
EventLoopGroup workerGroup = new NioEventLoopGroup();//
|
|
|
|
try {
|
|
ServerBootstrap b = new ServerBootstrap(); // (2)
|
|
b.group(bossGroup, workerGroup)
|
|
.channel(NioServerSocketChannel.class) // (3)
|
|
.childHandler(new ChannelInitializer<SocketChannel>() { // (4)
|
|
@Override
|
|
public void initChannel(SocketChannel ch) throws Exception {
|
|
Charset gbk = Charset.forName("utf-8");
|
|
ch.pipeline().addLast(new DelimiterBasedFrameDecoder(1024, Unpooled.copiedBuffer("_"
|
|
.getBytes())));
|
|
ch.pipeline().addLast("encoder", new StringEncoder(gbk));//out
|
|
ch.pipeline().addLast("decoder", new StringDecoder(gbk));//in
|
|
ch.pipeline().addLast(new DiscardServerHandler());
|
|
}
|
|
})
|
|
.option(ChannelOption.SO_BACKLOG, 128) // (5)
|
|
.childOption(ChannelOption.SO_KEEPALIVE, true); // (6)
|
|
|
|
// Bind and start to accept incoming connections.
|
|
System.out.println("tcp start success");
|
|
ChannelFuture f = b.bind(port).sync(); // (7)
|
|
|
|
|
|
// Wait until the server socket is closed.
|
|
// In this example, this does not happen, but you can do that to gracefully
|
|
// shut down your server.
|
|
f.channel().closeFuture().sync();
|
|
} finally {
|
|
workerGroup.shutdownGracefully();
|
|
bossGroup.shutdownGracefully();
|
|
}
|
|
}
|
|
|
|
}
|