概述
就我个人的感受来说netty是一个nio的封装框架,他能够很简洁的进行tcp udp协议的开发使用。所以对于netty的使用大部分是基于rpc框架的开发 比如duboo.。
rpc 与webService
rpc简称远程方法调用 通过tcp udp websocket协议 进行数据的二进制传输和调用 与webService其实也可以称为rpc 但是最主要的不同是WebService是基于http协议的而且他的传输格式是json形式 在输出的效率上会差的比较多
netty的三大线程模型(reactor线程模型)
1.单线程模型:直接从名词上可以理解 就是创建一个线程处理所有连接读写的请求
2.多线程模型:在该模型中创建了两个事件对象 分别位boss事件对象和worker 事件对象其中worker事件对象位线池模式
3. 主从线程模型
在多线程模型中有单线程的boss事件对象而在主从线程模型中考虑到分发线程的压力所以在boss事件对象中也是由线程池进行负载均衡的
初步使用
package com.xiao.netty.first; import com.sun.corba.se.internal.CosNaming.BootstrapServer; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; public class TestServer { public static void main(String args[]) throws InterruptedException { //由下的group可以推断出该线程模型有主从线程模型 EventLoopGroup boss =new NioEventLoopGroup(); EventLoopGroup worker=new NioEventLoopGroup(); try { //创建服务serverBootstrap ServerBootstrap serverBootstrap = new ServerBootstrap(); //childHandler绑定的是worker线程池,Handler绑定的是boss线程池 serverBootstrap.group(boss, worker).channel(NioServerSocketChannel.class).childHandler(new TestServerInitializer()); //绑定8899端口并监听 ChannelFuture channelFuture = serverBootstrap.bind(8899).sync(); //监听事件停止操作 channelFuture.channel().closeFuture().sync(); }finally { //优雅关闭 boss.shutdownGracefully(); worker.shutdownGracefully(); } } }