netty简单介绍
?
ServerBootstrap
?
启动netty只需要三行代码:
1. OioWorker.run()?? 负责监听一个socket的InputStream
2. Channels.fireMessageReceived()? 发送消息 ?
3. channel.getPipeline().sendUpstream(); 通知给pipline?
?
自定义Hander
因为没有hander,所以日志里面会有警告:
?
public void sendUpstream(ChannelEvent e) { DefaultChannelHandlerContext next = getActualUpstreamContext(this.next); if (next != null) { DefaultChannelPipeline.this.sendUpstream(next, e); } }?报文frame
?
报文frame的问题,即由于这种状态机模型,你的某个channel每收到一段buffer,虽然顺序是保证的,但是完整性就不一定了。就好像我们自己写传统socket要循环读一样,你这里同样要循环读,读到完整可解析的一整个frame方能解析,这个问题应该也不是netty独有的,除非你以前写socket应用都是侥幸没有被网卡被操作系统被网关路由器之类的切过包。。。
netty有dynamicBuffer,就是用来聚集frame的,当然你也可以通过它提供的decoder来保证frame。
?
?
?
?
?