//netty 中writeandflush()方法
整体步骤:先write再flush
ctx.writeAndFlush() –> TailHandler –> Handler … —> HeadHandler –> Unsafe.write()
write方法实际上并没有将消息写出去, 而是将消息msg和此次操作的promise放入到当前连接的输出缓冲区OutboundBuffer中了;
ctx.writeAndFlush() –> TailHandler –> Handler … —> HeadHandler –> Unsafe.flush() –> AbstractNioByteChannel.doWrite() –> ChannelOutboundBuffer.remove() –> Promise.notifyListeners();
Netty强烈建议直接通过添加监听器的方式获取IO结果,而不是通过同步等待的方式
如果用户操作调用了sync或者await方法,会在对应的future对象上阻塞用户线程,例如future.channel().closeFuture().sync()
//springboot第27章
ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式
在Spring内部中有多种方式实现监听如:@EventListener注解、实现ApplicationListener泛型接口、实现SmartApplicationListener接口等,我们下面来讲解下这三种方式分别如何实现。
既然是监听所有的事件发布,那么SmartApplicationListener接口添加了两个方法supportsEventType、supportsSourceType来作为区分是否是我们监听的事件,只有这两个方法同时返回true时才会执行onApplicationEvent方法。
事件监听是无序的,监听到的事件先后顺序完全随机出现的
网友评论