近来在做项目的时候,遇到了一个消息推送的功能,百度了一下,主要有几种方法:
1.前端轮询发出请求,后端返回数据
2.前端与后端建立一个长连接
第一种方法未免太暴力,而且对数据库后台的消耗也很大,最后就是抱着学习新框架,抱着学习网络框架的心,选了第二种
好,我用第二种方法,第二种就是主要有下面几种,websocket,NIO,Netty.
Netty作为新的一个框架,其实有很多RPC框架都以他为载体,比如阿里的dubbo、RocketMQ等。时代一直在进步,人也要进步,就从用Netty开始
学东西首先从总体认识开始,先知道这个东西可以做什么,然后再慢慢深入....
Netty一共有4个部分:
1.channelhandler 这个是处理收入信息的一个类,主要有SignalInboundHandlerAdapter,SignalOutboundHandlerAdapter等,主要用来写我们的业务代码
2..回调 处理事件。封装了自己的ChannelFuture 不熟的可以先看看Future https://blog.csdn.net/u014209205/article/details/80598209。ChannelFuture可以添加监听事件,这是一个异步事件,如下代码是绑定服务启动端口。同时加了个异步的消息监听器,绑定6666端口,完成之后打印6666
这里顺便复习了一下观察者模式:观察者模式通过给在观察者用一个数据结果比如hashmapp保存所有的响应者,当有某种条件达成时便会遍历数据结构里的所有响应对象,执行相应的方法
this.channelFuture = serverBootstrap.bind(6666).sync(); channelFuture.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture channelFuture) throws Exception { System.out.println("6666"); } });
3. Channel channel拥有一个EVENTLOOP,就是一个现程,通过channelpineline可以给channel添加处理器
下一篇再详细分析每一项