java 使用netty搭建tcp服务器(hello world)
2020-12-13 05:08
标签:stat 通道 encoder 方法 允许 boot str this 捆绑 java 使用netty搭建tcp服务器(hello world) 标签:stat 通道 encoder 方法 允许 boot str this 捆绑 原文地址:https://www.cnblogs.com/jiecaoge/p/11131974.htmlpublic class Program {
public static void main(String[] args) throws Exception {
EchoServer echoServer = new EchoServer("127.0.0.1", 8888); // 启动
echoServer.start();
}
}
class EchoServer {
private final int port;
private final String ip;
public EchoServer(String ip, int port) {
this.ip = ip;
this.port = port;
}
public void start() throws Exception {
// 创建用于监听accept的线程池
EventLoopGroup bossGroup = new NioEventLoopGroup();
// 创建用于处理队列和数据的线程池
EventLoopGroup group = new NioEventLoopGroup();
try {
ServerBootstrap bootstrap = new ServerBootstrap();
// BACKLOG用于构造服务端套接字ServerSocket对象,标识当服务器请求处理线程全满时
// ,用于临时存放已完成三次握手的请求的队列的最大长度。如果未设置或所设置的值小于1,Java将使用默认值50。
bootstrap.option(ChannelOption.SO_BACKLOG, 1024);
// SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口,
// 即使以前建立的将此端口用做他们的本地端口的连接仍存在。
// 这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。
// SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,
// 只要每个实例捆绑一个不同的本地IP地址即可。对于TCP,
// 我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。
// SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,
// 只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。
// SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,
// 还允许此IP地址和端口捆绑到另一个套接口上。一般来说,这个特性仅在支持多播的系统上才有,
// 而且只对UDP套接口而言(TCP不支持多播)
bootstrap.option(ChannelOption.SO_REUSEADDR, true);
// Netty4使用对象池,重用缓冲区
bootstrap.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
bootstrap.childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
// 绑定线程池
bootstrap.group(group, bossGroup);
// 指定使用的channel
bootstrap.channel(NioServerSocketChannel.class);
// 绑定监听端口
;
// 绑定客户端连接时候触发操作
bootstrap.childHandler(new ChannelInitializer
文章标题:java 使用netty搭建tcp服务器(hello world)
文章链接:http://soscw.com/essay/30468.html