-
aio通信模型
查看全部 -
nio通信模型
查看全部 -
伪异步io通信模型
查看全部 -
bio通信模型
查看全部 -
bio相关概念
查看全部 -
epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。
查看全部 -
BIO通信:服务端接收到客户端的请求之后,为每一个客户端创建一个线程进行处理,通过输出流把应答发送给客户端,最后销毁线程。(1对1,阻塞同步的IO)
伪异步IO通信:当有新的客户端接入的时候,将客户端的socket封装成一个task投递到后端的线程池进行处理,线程池维护一个消息队列和N个活跃的线程,对消息队列中的任务进行相关的处理。(M对N,阻塞同步的IO)
NIO通信:在面向流的IO中可以将数据直接写入或者将数据直接读到Stream对象中,在NIO中,所有数据都是用缓冲区进行处理的,在读取数据时,直接读缓冲区中,在写入数据时,是直接写入缓冲区中。任何时候处理NIO中的数据时都是通过缓冲区进行操作。网络数据通过Channel读取和写入。selector提供了选择已经就绪的任务的能力,会通过不断轮询在其上的Channel,在某个Channel上面发生读或者写事件,则该Channel处于就绪状态,会被Selector轮询出来,然后获取Channel的集合进行后续的操作。(M对1,非阻塞同步的IO)
AIO通信:AIO的异步套接自通道,是真正的异步非阻塞IO,对应于Unix网络编程中的事件驱动IO,不需要通过多路复用器对被注册的通道进行轮询操作即可实现异步读写,从而简化NIO的编程模型。(M对0,非阻塞异步IO)
查看全部 -
1 SimpleChannelInboundHandler实现
处理打开、关闭、异常、接收
2 ChannelInitializer<SocketChannel>类的实现
initChannel(SocketChannel)
e.pipeline().addLast("http-codec",new HttpServerCodec());
e.pipeline()addLast("aggregator", new HttpObjectAggregator(65536);
e.pipeline().addLast("http-chunked",new ChunkedWriterHandler());
e.pipeline().addLast("handler",new MyWebSocketHandler());
websocket启动类,用EventLoopGroup、ServerBootstrap
ServerBootstrap b=new ServerBootstrap();
b.group(bossGroup,workGroup);
b.channel(NioServerSocketChannel.class);
b.childHandler(new MyWebSocketChannelHandler());
Channel ch=b.bind(8888).sync().channel();
ch.closeFuture().sync();
查看全部 -
java中的IO:BIO、伪异步IO、AIO、NIO
BIO:一个线程负责连接 、一请求一应答、缺乏弹性伸缩能力(线程数增加后系统性能极具下降);
伪异步IO:线程池负责连接、M请求N连接、线程池可以是线程资源可控(设置最大连接数等)但是会产生线程池阻塞;
NIO:缓冲区Buffer(NIO中的数据读写都是通过缓冲区buffer操作)、通道Channel(可以是双向的,流是单向的)、多路复用器Selector(轮询出就绪状态的Channel的集合,可以进行后续的IO操作,没有最大连接数限制);
AIO:连接注册读写事件和回调函数(事件驱动IO)、读写方法异步(真正的异步非阻塞IO)、主动通知程序
查看全部 -
webSocket生命周期
查看全部 -
客户端个数:
BIO(同步阻塞IO):一比一
伪异步IO(同步阻塞IO):M比N
NIO(同步非阻塞):M比1
AIO(异步非阻塞):M比0,不需要启动额外线程,被动回调
查看全部 -
存储整个工程的全局配置
public class NettyConfig{
存储每一个客户端接入进来时的channel对象
public static ChannelGroup group = new DefaultChannelGroup(GlobalEventExector.INSTAnce)
}
查看全部 -
WebSocket关闭连接
服务器关闭底层TCP连接
客户端发起TCP Close
查看全部 -
WebSocket生命周期
打开事件
消息事件
错误事件
关闭事件
查看全部 -
WebSocket建立连接
客户端发起握手请求
服务器响应请求
连接建立
查看全部
举报