Java NIO框架Netty教程(十七) - Netty4 Hello world

Netty4学习笔记(一) 基础篇 在开始学习Netty之前,我们先对Unix系统常用的I/O模型进行介绍,然后对Java的I/O历史演进历史进行简单的说明。Linux 网络I/O模型简介Linux内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个 file descriptor(fd,文件描述符)。而对一个socket的读写也会有相应的描述符,称为 socket fd(socket描述符) 阅读详情

全文详见个人独立博客:Java NIO框架Netty教程(十七) - Netty4 Hello world

Java NIO框架Netty教程(十七) - Netty4 Hello world最近很多人问我有没有Netty4的Hello World样例,很早之前知道Netty要出4,当时只知道4的包名完全边了,因为Netty从JBoss中独立出来了,并采用了新的netty.io的域名,但是没想到代码也有这么大的调整。 既然答应了别人,就抽时间看一下Netty4,也顺便补充一下自己的知识。还是先从最简单的Hello world开始吧。下面代码基于最近版的Netty4,netty4.0.12-Final。由于Netty4最代码进行了分包,分了很多工程,有可能会对你的开发造成困扰,不过Netty4也提供了一个netty4-all的jar包,里面包含了所有的代码,方便你进行依赖开发。这里OneCoder用的就是该jar包。 /** * Netty4 服务端代码 * * @author lihzh * @date 2013年11月15日 下午1:10:06 * @website http://www.coderli.com */ public class HelloWorldServer { public static void main(String[] args) { // EventLoop 代替原来的 ChannelFactory EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap = new ServerBootstrap(); // server端采用简洁的连写方式,client端才用分段普通写法。 serverBootstrap.group(bossGroup, workerGroup) .channel(NioServerSocketChannel. class ) .childHandler( new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast( new HelloServerHandler()); } }).option(ChannelOption. SO_KEEPALIVE , true ); ChannelFuture f = serverBootstrap.bind(8000).sync(); f.channel().closeFuture().sync(); } catch (InterruptedException e) { } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } } private static class HelloServerHandler extends ChannelInboundHandlerAdapter { /** * 当绑定到服务端的时候触发,打印"Hello world, I'm client." * * @alia OneCoder * @author lihzh * @date 2013年11月16日 上午12:50:47 */ @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { System. out .println("Hello world, I'm server."); } } } /** * Netty4 客户端代码 * @author OneCoder * @date 2013年11月15日 下午1:28:21 * @website http://www.coderli.com */ public class HelloWorldClient { public static void main(String args[]) { // Client服务启动器 3.x的ClientBootstrap 改为Bootstrap,且构造函数变化很大,这里用无参构造。 Bootstrap bootstrap = new Bootstrap(); // 指定channel类型 bootstrap.channel(NioSocketChannel. class ); // 指定Handler bootstrap.handler( new HelloClientHandler()); // 指定EventLoopGroup bootstrap.group( new NioEventLoopGroup()); // 连接到本地的8000端口的服务端 bootstrap.connect( new InetSocketAddress("127.0.0.1" , 8000)); } private static class HelloClientHandler extends ChannelInboundHandlerAdapter { /** * 当绑定到服务端的时候触发,打印"Hello world, I'm client." * * @alia OneCoder * @author lihzh * @date 2013年11月16日 上午12:50:47 */ @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { System. out .println("Hello world, I'm client."); } } } 一些主要的变化和对比注释在代码中。简单补充介绍几点: NioEventLoopGroup 是一个处理I/O操作的多线程事件环。即为Netty4里的线程池,在3.x里,一个Channel是由ChannelFactory创建的,同时新创建的Channel会自动注册到一个隐藏的I/O线程。 4.0使用新的名为EventLoopGroup的接口来替换ChannelFactory,它由一个或多个EventLoop来构成。一个新的 Channel不会自动注册到EventLoopGroup,但用户可以显式调用EventLoopGroup.register()来注册。在Server端的Bootstrap参数中,有两个EventLoopGroup,第一个通常称为’boss’,用于接收发来的连接请求。第二个称为’worker’,,用于处理boss接受并且注册给worker的连接中的信息。 ChannelInitializer是一个特殊的handler,用于方便的配置用户自定义的handler实现,如代码中所示。在channelRegistered的生命周期中会触发用户复写的initChannel(C ch)方法,并且在调用后会讲自身从channelPipeline中移除。icon-default.png?t=N7T8https://www.coderli.com/netty4-hello-world/欢迎加入群聊,一起交流探讨:【Java学习交流(982860385)】

最近很多人问我有没有Netty4的Hello World样例,很早之前知道Netty要出4,当时只知道4的包名完全边了,因为Netty从JBoss中独立出来了,并采用了新的netty.io的域名,但是没想到代码也有这么大的调整。

既然答应了别人,就抽时间看一下Netty4,也顺便补充一下自己的知识。还是先从最简单的Hello world开始吧。下面代码基于最近版的Netty4,netty4.0.12-Final。由于Netty4最代码进行了分包,分了很多工程,有可能会对你的开发造成困扰,不过Netty4也提供了一个netty4-all的jar包,里面包含了所有的代码,方便你进行依赖开发。这里OneCoder用的就是该jar包。

服务端代码如下:

/**
 * Netty4 服务端代码
 *
 * @author lihzh
 * @date 2013年11月15日 下午1:10:06
 * @website http://www.coderli.com
 */
public class HelloWorldServer {

      public static void main(String[] args) {
           // EventLoop 代替原来的 ChannelFactory
          EventLoopGroup bossGroup = new NioEventLoopGroup();
          EventLoopGroup workerGroup = new NioEventLoopGroup();
           try {
               ServerBootstrap serverBootstrap = new ServerBootstrap();
               // server端采用简洁的连写方式,client端才用分段普通写法。
              serverBootstrap.group(bossGroup, workerGroup)
                        .channel(NioServerSocketChannel. class )
                        .childHandler( new ChannelInitializer<SocketChannel>() {
                              @Override
                              public void initChannel(SocketChannel ch)
                                       throws Exception {
                                  ch.pipeline().addLast( new HelloServerHandler());
                             }
                        }).option(ChannelOption. SO_KEEPALIVE , true );

              ChannelFuture f = serverBootstrap.bind(8000).sync();
              f.channel().closeFuture().sync();
          } catch (InterruptedException e) {
          } finally {
              workerGroup.shutdownGracefully();
              bossGroup.shutdownGracefully();
          }
     }

      private static class HelloServerHandler extends
              ChannelInboundHandlerAdapter {

           /**
           * 当绑定到服务端的时候触发,打印"Hello world, I'm client."
           *
           * @alia OneCoder
           * @author lihzh
           * @date 2013年11月16日 上午12:50:47
           */
           @Override
           public void channelActive(ChannelHandlerContext ctx) throws Exception {
              System. out .println("Hello world, I'm server.");
          }
     }

}

客服端代码如下:

  全文详见个人独立博客:Java NIO框架Netty教程(十七) - Netty4 Hello world

 欢迎加入群聊,一起交流探讨:【Java学习交流(982860385)】

基于Java语言的Netty4框架的实用设计源码示例 本项目是一个基于Java语言的Netty4框架的实用设计源码示例,包含223个文件,其中Java源文件63个,Shell脚本3个,JavaScript和CSS文件各3个,HTML文件1个,并附有130个GIF动画、7个XML配置、4个PNG图片、4个JPG图片、2个批处理文件、2个属性文件和1个Markdown文档。 立即下载

相关推荐

VS2015与QT界面开发中解决‘ui_xxx.h‘文件类名不一致导致的编译错误

本文详细解析了在VS2015与QT界面开发中,因.ui文件顶层部件objectName与生成类名不一致导致'ui_xxx.h'文件出现'不完整的类型'编译错误的根本原因。通过分步排查,指导开发者统一Qt设计师对象名、自动生成文件类名及代码引用名,并提供强制重新编译UI文件、清理中间文件等解决方案,有效解决此类常见编译问题。

weixin_29009339的博客 248

netty4 核心原理-基础篇

开篇题 新入职一家公司,工作节奏较快,没有过多属于自己的时间,时间管理方面必须将时间颗粒度划分的更细点,努力挤出点属于自己的时间,学习和巩固下相关知识。netty目前计划规划三遍,基础篇,核心理论篇,实战篇,现在开始netty学习之旅。 1.什么是netty? Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 Netty 是一个广泛使用的 Java 网络编程框架(Netty 在 2011 年获得了Duke's ...

jackwang91的博客 1561

金蝶云星空v8.0私有化部署与cpolar内网穿透:构建企业级远程ERP访问通道

本文详细介绍了金蝶云星空v8.0企业版的私有化部署流程与cpolar内网穿透技术,帮助企业构建安全高效的远程ERP访问通道。从系统环境准备、SQL Server配置到内网穿透安全加固,提供全流程实战指导,助力企业实现本地部署与远程办公的无缝衔接。

weixin_28736335的博客 376

Netty4学习笔记 --- Netty入门

1、Netty介绍 2、Netty的应用场景    互联网行业: 在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。典型的应用有:阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进...

小道的博客 1056

使用VLC库实现视频播放器(WPF版)

使用wpf制作一个视频播放器 一、 LibVLCSharp介绍 LibVLCSharp是基于VideoLAN的LibVLC库的.NET平台的跨平台音频和视频API。它提供了一个全面的多媒体API,可以跨移动、服务器和桌面使用,以呈现视频和输出音频。支持Mono、.NET Framework和.NET核心运行时。在vs工具中,只需要安装截图中得两个nuget包。 二、视频播放器的实现 视频播放器的实现需要用到两个比较nuget包中提供的类,MediaPlayer类。MediaPlayer类型用于控

cangqiongxiaoye的博客 1万+

基于ZYNQ7020芯片(黑金开发板AX7020)之AXI-FULL DDR的PL与PS交互操作。

在该工程中我们使用了PS端的串口接收功能,PS端串口接收和发送分别有一个64字节的FIFO,但是因为串口接收阈值设置为16,所以固定接收16个字节数据后才会发生中断。此测试工程得到以前知识的总结和各大网友的支持,只希望可以为学习的你更进一步,大家一起学习才是真的开心。加油,国产芯片之路。

landyjzlai的博客 3192

netty4 详解---开发第一个Netty应用程序

既然是入门,那我们就在这里写一个简单的Demo,客户端发送一个字符串到服务器端,服务器端接收字符串后再发送回客户端。2.1、配置开发环境 1.安装JDK 2.去官网下载jar包 (或者通过pom构建) 2.2、认识下Netty的Client和Server 一个Netty应用模型,如下图所示,但需要明白一点的是,我们写的Server会自动处理多客户端请求,理论上讲,处理并发的能力决

weigao_easy的博客 1424

oracle合并行---解决listagg 拼接字段返回过长 (Ora-01489 result of String concatenation is too long)

oracle合并行---解决listagg 拼接字段返回过长 (Ora-01489 result of String concatenation is too long)

清影的博客 6283

Java NIO框架Netty教程(十七) Netty4 Hello world

最近很多人问我有没有Netty4的Hello World样例,很早之前知道Netty要出4,当时只知道4的包名完全边了,因为Netty从JBoss中独立出来了,并采用了新的netty.io的域名,但是没想到代码也有这么大的调整。 既然答应了别人,就抽时间看一下Netty4,也顺便补充一下自己的知识。还是先从最简单的Hello world开始吧。下面代码基于最近版的Netty4,netty4.

jackwu_2015的博客 768

RK3588开发板DDR频率上不去?手把手教你用ddrbin_tool降频调优(附完整配置流程)

本文详细介绍了RK3588开发板DDR频率调优的完整解决方案,重点使用ddrbin_tool工具进行降频配置。从硬件原理分析到实战操作,包括参数导出、频率调整、二进制生成及烧录验证,帮助开发者解决DDR高频不稳定问题,提升系统可靠性。适用于嵌入式开发、工业控制等场景。

weixin_42713608的博客 544

Quartus ||———基于Verilog HDL的数字秒表设计实验

Quartus ||———基于Verilog HDL的数字秒表设计实验一、实验目的二、实验步骤(一)新建工程(二)添加设计文件(三)综合分析与功能仿真1、综合分析2、功能仿真 一、实验目的 用Verilog HDL设计一个数字跑表,所需引脚和功能如下: 二、实验步骤 (一)新建工程 在创建好工程名称后,选定芯片类型 (二)添加设计文件 新建Verilog文件,键入代码如下 module n_clk_top( input clk, input rese

TBMmagic的博客 5526

Netty4框架原理

文章目录EventLoopGroup与ReactorChannel与ChannelPipelineChannelPipeline 的初始化ChannelHandler修改ChannelPipeline布局能力ChannelPipeline中的触发事件ChannelHandlerContext接口head 和 tail (ChannelHandler&ChannelHandlerContext)使用 ChannelHandlerContext为什么会想要从 ChannelPipeline 中的某个特定

weixin_35720385的博客 1935

五步教你用GPT-5画出国自然技术路线图!轻松节省80%画图时间(附AI提示词)

七哥给大家推荐的高校都在用的AI平台——高级学术版专业应用平台,集成了ChatGPT、Claude、Gemini、Grok等Al大模型的PLUS版本平台,包括 ChatGPT-5、4o、o3、4.1、4.5、Gemini 2.5 Pro、Claude 3.7、Claude 4、DeepSeek 满血版、Grok 3 、Grok 4等原生线路,还有国际主流的GPTs学术应用,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。

智能AI让学术科研更容易 1500

java netty 教程,Java NIO框架Netty教程(十七) - Netty4 Hello world

最近很多人问我有没有Netty4的Hello World样例,很早之前知道Netty要出4,当时只知道4的包名完全边了,因为Netty从JBoss中独立出来了,并采用了新的netty.io的域名,但是没想到代码也有这么大的调整。既然答应了别人,就抽时间看一下Netty4,也顺便补充一下自己的知识。还是先从最简单的Hello world开始吧。下面代码基于最近版的Netty4,netty4.0.12...

weixin_39997696的博客 202

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java 21 虚拟线程深度实战:告别线程池焦虑,百万并发吞吐量直接翻倍(原理+代码+避坑)

虚拟线程的本质贡献,是把"线程"从需要精打细算的昂贵资源,还原成了像对象分配一样廉价的抽象——仅此一点,就足以改写我们习以为常的很多最佳实践:不再池化、每任务一个线程、不再调线程数而是配信号量、用 ScopedValue 替代 ThreadLocal、用结构化并发替代手工 Future 编排。并发上限从"JVM 能养多少线程"变成了"下游系统能扛多少"。虚拟线程不会替你做容量规划,也不会把 CPU 密集任务变快。先理解这一点的人,会把线程用得像水一样自然;不理解的人,会先把下游打爆,再回头怪水太大。

如果足够勇敢 应该扛起问题往前走 直到因果成熟自动脱落 人对问题的解决方式 不是试图找到答案 而是背负到可以解决的那一天 355

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Netty系列之Netty高性能之道

1. 背景\\1.1. 惊人的性能数据\\最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。\\事实上,我对这个数据并不感到惊讶,根据我5年多的NIO编程经验,通过选择合适的NIO框架,加上高性能的压缩二...

cpongo5 5532

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Netty4详解三:Netty架构设计

读完这一章,我们基本上可以了解到Netty所有重要的组件,对Netty有一个全面的认识,这对下一步深入学习Netty是十分重要的,而学完这一章,我们其实已经可以用Netty解决一些常规的问题了。 一、先纵览一下Netty,看看Netty都有哪些组件?      为了更好的理解和进一步深入Netty,我们先总体认识一下Netty用到的组件及它们在整个Netty架构中是怎么协调工作

Heaven Wang 的专栏 3万+

Netty4自学笔记 (1) - Java BIO

五六年过去了,Netty早已发展到了4.x系列,好奇也好,求知也罢,我打算重学Netty,虽然严格来说,我已不是IT从业人员,但我仍希望保留对技术的热爱与追求。

CoderCoding的博客 940

Netty04——优化与源码

优化与源码

代码星辰的博客 804

Netty4 学习笔记之一:客户端与服务端通信 demo

前言 因为以前在项目中使用过Mina框架,感受到了该框架的强大之处。于是在业余时间也学习了一下Netty。因为Netty的主要版本是Netty3和Netty4(Netty5已经被取消了),所以我就直接学习Netty4。在本文中演示的就是Netty的一个简单demo。 开发准备 Netty4的官方网站是:http://netty.io/ 。 本文使用的是Netty4.1。 由于Ne...

weixin_33737774的博客 1305

Netty高性能架构之Reactor模式

  在讨论Netty的架构模式之前,我们先来介绍下Reactor模式,因为Netty的架构模式是在此基础上演变而来的 Reactor模式介绍 1. 线程模型基本介绍   不同的线程模式,对程序的性能有很大影响,为了搞清Netty 线程模式,我们来系统的讲解下 各个线程模式, 最后看看Netty 线程模型有什么优越性.   目前存在的线程模型有: 传统阻塞 I/O 服务模型 Reactor 模式 ...

波波烤鸭的博客 6327

netty4.x搭建服务端和客户端及各个关键类详解

它是一个处理I/O操作的多线程事件循环。Netty为不同类型的传输提供了各种EventLoopGroup实现。在本例中,我们正在实现一个服务器端应用程序,因此将使用两个NioEventLoopGroup。第一个,通常被称为“老板”,接受传入的连接。第二个,通常称为“worker”,在老板接受连接后处理已接受的连接的流量,并将已接受的连接注册到work线程中。使用多少线程以及它们如何映射到创建的通道取决于EventLoopGroup实现,甚至可以通过构造函数进行配置。它是一个设置服务器的帮助类。您可以直接使用

superzhang6666的博客 1445

java nio netty_Java NIO框架--Netty4的简单示例

简介相比Netty3, Netty4有很多显著的变化:NioEventLoopGroup 是一个处理I/O操作的多线程事件环。即为Netty4里的线程池,在3.x里,一个Channel是由ChannelFactory创建的,同时新创建的Channel会自动注册到一个隐藏的I/O线程。 4.0使用新的名为EventLoopGroup的接口来替换ChannelFactory,它由一个或多个EventL...

weixin_28836507的博客 213

Netty4.X 学习过程(一)

最近有做过关于mina的开发,感觉开发起来不是很方便,便问了一下组长有没有什么其他的IO框架,便来了解了一下netty,结果网上的人都说这个框架的性能不错。慢慢的使用的人也越来越多了,再这里记录我学习的过程,争取每天抽点时间来学习这个框架! Netty的官网:netty官网首先看官网快速开发的教程:4.x的官网快速开发文档前面的都是说这个框架的有什么好处,可以解决那些现在存在的什么问题。我们直接从编

327

Netty4自学笔记 (2) - Java NIO

距离上一篇博文已经过去了半个多月。这期间有一周多的时间用在了准备单位举办的英语竞赛上。余下的时间沉迷于陪孩子玩耍和睡觉,日复一日。

CoderCoding的博客 1265
上一篇: Java NIO框架Netty教程(十六)-ServerBootStrap启动流程源码分析
下一篇: Netty4自学笔记 (1) - Java BIO
CoderCodingNo
博客等级 码龄4年 2041粉丝 635原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值