一些主要的变化和对比注释在代码中。简单补充介绍几点:
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中移除。
在实际写代码的时候handler会独立出来。
/**
* 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.");
}
}
}
来自:
http://www.coderli.com/netty4-hello-world/
分享到:
相关推荐
Netty之helloworld示列,客户端,服务器示列代码,欢迎初学者学习。
netty4.x的hello world 范例,可以运行,直接导入工程,需要依赖包netty-all-4.0.25.final.jar,可以去MAVEN仓库下载或者百度下载。
Netty入门,HelloWorld Demo 以及实现了心跳机制的HeartBeat Demo
Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍示例代码;Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍示例代码
1.netty入门 -- netty-helloworld 2.netty的粘包 - netty-stick 3.netty支持的各协议,包含messagepack、protobuf以及私有协议 - netty-protocol 4.netty开发httpserver服务 - netty-httpserver 5.netty开发...
近百节视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效...2. Hello World 3. 组件 4. 双向通信 三. Netty 进阶 1. 粘包与半包 2. 协议设计与解析 3. 聊天室案例 四. 优化与源码 1. 优化 2. 源码分析
netty android收发消息的hello World ,代码包含android客户端(studio)和服务端,简单实现收发消息交互
cassandra-netty-rest-simple 集成了Cassandra,Netty和JBoss RESTEasy的简单应用程序。 它提供了一个Hello World REST Web服务,可以通过。 调用服务时,它将Person的实例持久化到名为DEMO的Cassandra键空间中。
Test http://localhost:8082/resteasy/hello/world 教程 jax-rs规范用法: http://www.vogella.com/tutorials/REST/article.html resteasy 教程: http://code.freedomho.com/9541.html 名次解释 RESTEasy:RESTEasy...
根据对请求在 10 秒后发送“Hello World” 根据对请求,重定向到指定的 url 根据对请求统计信息: 请求总数 唯一请求的数量(每个 IP 一个) 每个 IP 的请求计数器,以包含列和 IP、请求数量、上次请求时间的...
netty开发入门,包含hello world,Server与Client通讯。
:OK_hand: :netty-helloworld b。 『基础-通讯协议篇』 :OK_hand: :netty-http :OK_hand: netty-springboot-protobuf :OK_hand: netty-mqtt C。 『中级-数据传输篇』 Netty碰上关系型数据库 :monkey: ...
本书共分为 4 个部分:第一部分详细地介绍 Netty 的相关概念以及核心组件,第二部分介绍 自定义协议经常用到的编解码器,第三部分介绍 Netty 对于应用层高级协议的支持,会覆盖常见 的协议及其在实践中的应用,第四...
02、Mina客户端helloWorld入门.flv 03、Mina整体体系结构分析.flv 04、Mina学习之长短连接.flv 05、Mina学习之MinaIOService接口.flv 06、Mina学习之MinaIOFilter接口.flv 07、Mina学习之MinaIOSession接口.flv...
netty-examples是基于netty4开发的应用实例:rpc server和client的实现Netty4Client简化netty client的应用,实现自动重连功能RPC HelloWorld 实例服务实现public interface HelloWorld {public Result queryUser...
netty-example 使用Netty的示例Web服务器,受启发例子 public class App { public static void main ( final String [] args ) throws Exception { new WebServer () // Simple GET request .get( " /hello " , ...
NettyHttp服务器基于Netty框架的简单Http Server Netty Framework 版本 4.0.26.Final 已使用(稳定来自 maven repo) -request 在 10 秒内显示“Hello World”。 -request 重定向到 。 -request 显示有关连接、请求...
Kotlin Multiplatform的完整堆栈Hello World 项目结构 该项目由几个gradle模块以及一个xcode项目组成。 它是使用Intellij IDEA开发的,但可能也可以在Android Studio中使用。 共享 这是服务器和客户端中都包含的中央...
参考《Netty权威指南》实现私有协议栈功能,因为完全参照书上的写法会走一点弯路,所以这里把自己补充好、并且测试通过的功能代码上传给大家参考下。实现功能包括了编解码、登录权限、心跳包
框架需要在netty框架( )上实现一个http服务器,功能如下: 根据对请求在 10 秒后给出“Hello World” 根据对请求,重定向到指定的 url 根据对请求统计信息: 请求总数唯一请求的数量(每个 IP 一个) 每个 IP 的...