一 前言

netty和mina其实是一个人写的,所以风格非常类似。而在了解了netty和mina之后,笔者真是了解了Java框架的“高大全”。框架嘛,就是将通用的部分固定下来,我们在固定的位置填自己的逻辑代码就可以了。

二 netty架构

从使用上将,netty最后该来的“效果”很像http编程(据说tomcat的实现也跟netty有关,至少跟java nio有关)。

三 普通的java web开发与Netty的对比

如果不谈struts或spring mvc等上层组件,使用最原始的servlet来构建web项目,我们通常会用到servlet、listener和filter等三个组件。

public class HelloServlet extends HttpServlet  {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {PrintWriter out = resp.getWriter();out.write("hello world");}
}

我们知道,http的底层实现仍然是tcp,亦或者说,browser与web server底层仍然是socket通信。而通过j2ee,呈现在我们面前的是一个servlet。从HttpServletRequest可以拿到请求数据,通过HttpServletResponse可以写回响应。至于数据的encode与decode、socket通信、socket阻塞等细节完全不用关心。

与此同时,j2ee也提供基于事件的机制,那就是listener。

public class HelloListener implements ServletContextListener{public void contextDestroyed(ServletContextEvent arg0) {System.out.println("HelloListener contextDestroyed");}// web项目启动后会触发该方法public void contextInitialized(ServletContextEvent arg0) {System.out.println("HelloListener contextInitialized");}
}

对数据处理的粒度也是可以细化的,比如在真正处理数据前,先将其转换为json格式等,这些可以通过filter来完成。

public class HelloFilter implements Filter{public void destroy() {// TODO Auto-generated method stub}public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {// TODO Auto-generated method stub}public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}
}

所以j2ee主要实现了以下效果:

  1. 屏蔽了底层tcp的通信细节。(因为操作中看不到一点socket的痕迹,很容易让人认为web服务器是一个“独立的”高大上的技术)
  2. 规范了数据处理。(数据接收,数据转换,数据处理,数据输出)
  3. 提供了事件通知等机制,可以让代码及时通信转台变化做出反应。

总之,我们有很多办法实现两个系统间的相互访问,比如http client访问http server。但http并没有覆盖所有场景,比如无法处理大文件、近实时消息(比如聊天或财务数据)。socket肯定可以实现上述功能,但它太麻烦了。而netty作为一个“网络通讯框架”,就是用来解决这个问题。

netty中的IOHandler组件,便类似上述三个组件。

public class MyHandler extends ChannelHandlerAdapter{// 连接建立时@Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {super.channelActive(ctx);}// 连接断开时@Overridepublic void channelInactive(ChannelHandlerContext ctx) throws Exception {super.channelInactive(ctx);}// 接收到数据时(msg为接收到的数据,输出数据通过ctx写出)@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg)throws Exception {super.channelRead(ctx, msg);}// channelRead方法执行完毕时@Overridepublic void channelReadComplete(ChannelHandlerContext ctx) throws Exception {super.channelReadComplete(ctx);}
}

handler可以形成一个pipeline,依次对数据进行处理。比如在pipeline中可以添加一个encoder(也继承自ChannelHandlerAdapter),在对数据进行处理前,先进行编码。

说了这些,其实想结合http和netty说明一下,网络通信框架在做什么,一般提供什么样的封装等等。

四 引用

Netty初步

转载于:https://www.cnblogs.com/qiankunli/p/4541628.html

Java Netty 初步相关推荐

  1. Netty初步之hello world

    http://blog.csdn.net/cxhzqhzq/article/details/6611977 Java的网络操作一直比较复杂,虽然说在加入NIO之后简单了些,但还不是我这些菜鸟玩得起的, ...

  2. 201671010135 2016--2017java程序设计对java的初步认识和对第一,二章的总结(0)

    201671010135  2016--2017<java程序设计>对java的初步认识和对第一,二章的总结(0) java是一种程序语言设计.html是一种描述网页结构的方式.除了用于在 ...

  3. java netty聊天室_netty实现消息中心(二)基于netty搭建一个聊天室

    前言 上篇博文(netty实现消息中心(一)思路整理 )大概说了下netty websocket消息中心的设计思路,这篇文章主要说说简化版的netty聊天室代码实现,支持群聊和点对点聊天. 此demo ...

  4. java 带宽控制_如何使用Java netty正确限制带宽使用?

    对于我使用netty nio lib在 Java中开发的下载客户端,我还实现了带宽限制功能.从技术上讲,我是通过GlobalTrafficShapingHandler对象完成的.基于这个类'JavaD ...

  5. tt协议号服务器,TTIot: TTIoT云端物联网Iot组件;面向JAVA;netty;mqtt;异步推送;以事件为驱动;为设备提供安全可靠的连接通信能力;...

    TTIoT云端物联网组件;面向JAVA;以事件为驱动;为设备提供安全可靠的连接通信能力 TTIoT简介 TTIOT的Broker采用MQTT协议与设备进行交互,可以应用在数据采集.能源监控.智能生活. ...

  6. java netty socket_Netty对socket的抽象

    传统socket 首先还是先了解下传统socket下的通信流程 流程很清晰,细节不讲太多. Netty抽象 在netty中步骤1监听端口对应就是NioEventLoop,即事件循环,这里的循环包括两个 ...

  7. java netty modbus协议接收iot数据

    IoTserver 源代码开源在gitee上 : IoT netty java gitee server sample c++ libuv 的IoT tcp server IoT c++ libuv ...

  8. java netty能做什么_开发:Netty快速入门,一看就懂!

    很早以前就写过关于 Netty 的使用,最近发现还有网友在看之前写的那篇 Netty 文章,个人感觉那时候写的很粗糙,怕影响同行的阅读质量,所以决定重新写一些关于 Netty 的文章,补充以前的不足. ...

  9. java fragment_初步认识Fragment 之一 编写简单的fragment代码

    今天初步学习到了Fragment ,如果说activity是一堵墙, 那么它类似于一个便利贴,能将内容写在上面粘贴到任意一面墙上, 而不需要每一堵墙上都写满相同的内容 , 下面我们来了解 怎样编写 F ...

  10. Java Netty (1)

    Netty是由JBOSS提供的一个java开源框架,本质上也是NIO,是对NIO的封装,比NIO更加高级,功能更加强大.可以说发展的路线是IO->NIO->Netty. ServerBoo ...

最新文章

  1. Sencha Touch 2 DataView / List 分页
  2. Centos6.5 安装配置docker
  3. 模组使用之NB-IoT模组的工作模式、PSM、DRX和eDRX状态说明
  4. Android持久化存储(2)SharedPreferences使用介绍
  5. (王道408考研操作系统)第二章进程管理-第三节8:经典同步问题之吸烟者问题
  6. 微信开源项目讲解使用公开课
  7. 学习笔记之awk用法
  8. Tensorflow结点打包和依赖控制
  9. linux 内核 网卡驱动 移植,linux内核移植步骤添加dm9000网卡驱动(设备树).docx
  10. Angular 分页
  11. 计算机的DNS地址如何设置,如何设置电脑的DNS地址?
  12. 万字讲解WiFi为何物
  13. 总结一下关于扫描电子显微镜与背散射电子探测器
  14. Android--设置显示大小导致APP crash
  15. C++ Tetris俄罗斯方块
  16. php 计算字数,实现word一样的字数计算
  17. IDEA类左侧有一个对勾,如何去掉对勾?
  18. ubuntu16.04 basler相机 图像采集卡设置
  19. VS2015正式版出炉-----
  20. 鸿蒙之境法有三乘,神都夜行录鸿蒙之境八百流沙详细打法攻略

热门文章

  1. x[:,n]或者x[n,:]的用法
  2. python实现判断一个字符串是否是合法IP地址
  3. 2021-08-13 初识servlet
  4. 2021-07-07 分类页面结构
  5. java arraydeque poll,Java ArrayDeque pollLast()方法
  6. 施密特正交化_夜思 | 为什么非实对称矩阵对应的特征向量不能施密特正交化?...
  7. solidity import @是什么意思
  8. 不经意传输算法 效果
  9. API 接口 并发测试 Jmeter Postman
  10. 将solidity智能合约打包成Java代码