当前位置: 首页 > news >正文

Netty 示例

1. Netty 示例

1.1. 简单的 Echo 服务器

这里,我们直接使用Netty作为独立的进程启动

1.1.1. Netty 依赖

maven依赖如下:

<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.2.7.Final</version>
</dependency>

1.1.2. Netty Server

这里我们直接通过Netty监听8080端口,作为服务端启动:

  • EchoServer.java
import com.huawei.athena.netty.handler.EchoServerHandler;
import io.netty.bootstrap.ServerBootstrap;
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.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import lombok.extern.slf4j.Slf4j;import java.util.concurrent.atomic.AtomicBoolean;@Slf4j
public class EchoServer {private final int port = 8080;private EventLoopGroup bossGroup;private EventLoopGroup workerGroup;private ChannelFuture serverChannelFuture;private final AtomicBoolean running = new AtomicBoolean(false);public void start() {if (!running.compareAndSet(false, true)) {log.info("the server is running");return;}// 创建事件循环组bossGroup = new NioEventLoopGroup();  // 用于接受连接workerGroup = new NioEventLoopGroup(); // 用于处理连接try {ServerBootstrap b = new ServerBootstrap();b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) // 使用NIO传输通道.option(ChannelOption.SO_BACKLOG, 100).handler(new LoggingHandler(LogLevel.INFO)).childHandler(new ChannelInitializer<SocketChannel>() {@Overridepublic void initChannel(SocketChannel ch) {ch.pipeline().addLast(new EchoServerHandler());}}).option(ChannelOption.SO_BACKLOG, 128)          // 服务器套接字选项.childOption(ChannelOption.SO_KEEPALIVE, true); // 客户端套接字选项// 绑定端口并开始接收连接serverChannelFuture = b.bind(port).sync();log.info("Echo服务器启动,监听端口: {}", port);// 等待服务器套接字关闭} catch (InterruptedException e) {log.error("can't start the netty server, ", e);stop();}}public void stop() {if (!running.compareAndSet(true, false)) {log.info("the server is running");return;}log.info("Shutting down Echo server...");// 先关闭服务器通道if (serverChannelFuture != null) {serverChannelFuture.channel().close().awaitUninterruptibly();}// 优雅关闭EventLoopGroupif (workerGroup != null) {workerGroup.shutdownGracefully();}if (bossGroup != null) {bossGroup.shutdownGracefully();}log.info("Echo server shutdown complete");}
}

1.1.3. 服务端回显处理

这里,我们实现了一个简单的业务逻辑,即收到客户端的数据后,不做任何处理,直接原样发送给客户端:

import io.netty.channel.ChannelHandler.Sharable;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;@Sharable
public class EchoServerHandler extends ChannelInboundHandlerAdapter {@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) {ctx.write(msg);}@Overridepublic void channelReadComplete(ChannelHandlerContext ctx) {ctx.flush();}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {cause.printStackTrace();ctx.close();}
}

1.1.4. 主程序

public class NettyApp {public static void main(String [] args) {new EchoServer().start();}
}

1.1.5. 验证

服务端启动进程NettyApp后,我们可以通过telnet命令与服务器交互:

telnet localhost 8008

如果一切正常,当你在控制台上输入字符后,你应该能看到它原样的输出,类似如下打印:

12233445566778899

2. 原理说明

3. 总结

这一章节,我们主要通过ServerBootstrap启动了服务端的应用

http://www.gsyq.cn/news/43843.html

相关文章:

  • Perfect Hash能用于分词吗?
  • 一对一视频直播app开发,golang fmt格式“占位符” - 云豹科技
  • Claude Code:让AI编程助手成为你的开发搭档
  • 2025年立体水幕电影直销厂家权威推荐榜单:3d水幕电影/水幕电影喷泉/水幕电影激光秀源头厂家精选
  • 毕业论文神器:9款免费AI写论文工具全测评,轻松过查重!
  • 十大最佳网络监控工具
  • 2025.11 模拟赛日志
  • 2025年优质的液压矫平机厂家实力及用户口碑排行榜
  • 2025年口碑好的厨房拉篮厂家推荐及采购参考
  • ADB命令详解
  • 2025年质量好的煤炭化验设备品牌厂家排行榜
  • 2025年专业的旋激式湿式除尘器厂家最新用户好评榜
  • 2025年可靠的混凝土水沟滑模机最新TOP品牌厂家排行
  • 2025年知名的无锡液压缸厂家推荐及采购指南
  • 2025年靠谱的阳台壁挂太阳能热水器厂家最新实力排行
  • 2025年口碑好的口袋插入门厂家推荐及选购指南
  • 2025年诚信的千级无尘车间高评价厂家推荐榜
  • 2025年有实力鲍鱼饲料超微粉碎机品牌厂家排行榜
  • 2025年口碑好的高温粘结剂拟薄水铝石厂家推荐及选择参考
  • 2025年靠谱的风管优质厂家推荐榜单
  • 2025年质量好的轻型卡车天窗厂家最新推荐权威榜
  • 2025年质量好的金属封边条厂家最新推荐排行榜
  • 2025年靠谱的自动绕线机高评价厂家推荐榜
  • 2025年靠谱的亚克力加工厂家推荐及选购参考榜
  • 2025年可靠的全屋定制实力厂家TOP推荐榜
  • 2025年口碑好的nfc标签厂家最新热销排行
  • 2025年有实力负氧离子床垫品牌厂家排行榜
  • 使用 NIFI读取EXCEL 数据到数据库
  • 2025年知名的离线压花机TOP品牌厂家排行榜
  • 2025年评价高的改性沥青设备厂家推荐及选择指南