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

ServerBootstrap和ClientBootstrap是Netty中两个比较重要的类,分别用来进行服务器和客户端的初始化。

服务器:

        // ChannelFactoryfinal ChannelFactory channelFactory = new NioServerSocketChannelFactory(  // Boss线程池,处理Socket请求
                Executors.newCachedThreadPool(),  // Worker线程池,由于使用的是NIO,1个Worker线程可以管理多个Channel
                Executors.newCachedThreadPool()); // ServerBootstrapServerBootstrap bootstrap = new ServerBootstrap(channelFactory);ServerPipelineFactory serverPipelineFactory = new ServerPipelineFactory(executionHandler);bootstrap.setPipelineFactory(serverPipelineFactory); 

ServerBootstrap实例化时需要一个ServerSocketChannelFactory参数,ServerSocketChannelFactory可以选择NioServerSocketChannelFactory或者OioServerSocketChannelFactory,NioServerSocketChannelFactory使用的是NIO,OioServerSocketChannelFactory使用的是普通IO。两者都需要两个线程池,一个Boss线程池,一个Worker线程池。一个Boss线程负责对一个端口的监听,接收到Socket连接请求以后交给一个Worker线程处理,然后自己继续监听。

Worker线程负责对接收到的连接请求进行处理,如果是NIO,一个Worker线程可以处理多个Socket或者说Channel,如果是普通IO,Worker线程和Socket或者说Channel是一一对应的关系。

Channel有消息到达时,Worker线程就进行处理。处理的过程类似于Struts的Filter-chain。每个Channel都有一个ChannelPipeline,ChannelPipeline定义了很多有顺序的Handler,按顺序对接收到的消息进行处理。

有些Handler,比如大量的IO操作,或者大量的读写数据库,会造成对消息的处理时间过长,长期占用Worker线程,这时就需要另一个线程池--Netty自带的ExecutionHandler。ExecutionHandler也是一个Handler,定义在ChannelPipeline里面,它会从自己的线程池里面拿出一个线程,处理写在自己后面的Handler,从而可以尽快释放Worker线程。

ExecutionHandler的实例化:

static ExecutionHandler executionHandler = new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(16, 1048576, 1048576));

Excecutor有两种:MemoryAwareThreadPoolExecutor和OrderedMemoryAwareThreadPoolExecutor,前者保证不会出现内存溢出错误,如果Event太多就会堵塞,后者除了保证不会出现内存溢出错误以外,还保证同一个Channel的Event按照顺序处理。

Java Netty (1)相关推荐

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

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

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

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

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

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

  4. java netty socket_Netty对socket的抽象

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

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

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

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

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

  7. java netty 面试_Java 200+ 面试题补充② Netty 模块

    让我们每天都能看到自己的进步.老王带你打造最全的 Java 面试清单,认真把一件事做到最好. 1.Netty 是什么? Netty 是一款基于 NIO(Nonblocking I/O,非阻塞IO)开发 ...

  8. Java+Netty+WebRTC、语音、视频、屏幕共享【聊天室设计实践】

    背景 本文使用webtrc实现了一个简单的语音视频聊天室.支持多人音视频聊天.屏幕共享. 环境配置 音视频功能需要在有Https协议的域名下才能获取到设备信息, 测试环境搭建Https服务参考Wind ...

  9. java netty wss_netty中websocket, wss

    websocket 直接使用SpringBoot+Netty来支持WebSocket,并且需要支持wss,其需要注意事项有以下: wss支持 websocket请求路径中带参数 针对第一个问题:wss ...

最新文章

  1. python水仙花数_scratch与pythonc++的不同,你了解吗?
  2. java类加载过程_面试官:java类的加载过程
  3. java 面试for循环_一个基础的for循环面试题
  4. Server 2008 R2 AD RMS完整部署:AD部署篇
  5. jQuery / zepto ajax 全局默认设置
  6. oracle安装 插件的执行方法失败_解决 VS Code 中 golang.org 被墙导致的 Go 插件安装失败问题...
  7. css checkbox自动换行,CSS checkbox
  8. mysql 页 存储,MySQL InnoDB Engine--数据页存储和UPDATE操作
  9. antd 轮播图样式_antd-design 的轮播图组件Carousel如何在初始化的时候自动跳转到特定图片...
  10. Solr(一) Solr 简介及搜索原理
  11. 删除远程桌面登录的记录(mstsc)
  12. c语言二级考试成绩查询,全国计算机二级考试成绩查询
  13. (十)stm32 GPIO口复用,重映射 RCC_APB2Periph_AFIO
  14. 中坚力量:Isilon
  15. linux之mysql基础
  16. PostgreSQL regress test
  17. 循环函数:while循环和for循环及函数定义
  18. Tita 推进企业绩效管理变革的最佳实践
  19. 显示前半内容后半内容用省略号_九年级语文下册第四单元写作修改润色课件新人教版...
  20. 如何Tomcat部署web应用

热门文章

  1. Linux网络设备驱动概述
  2. find a ubuntu featue
  3. Windows Moblie 笔迹图板开发
  4. 操作系统双语阅读 - Schedulers调度器2
  5. DKH大数据整体解决方案的优势介绍
  6. 从零开始写项目第八篇【将未完成的项目发布在Tomcat上】
  7. 中小企业监控体系构建实战
  8. 批量激活管理工具VAMT 3.0的安装与基本使用方法简介
  9. [转]Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
  10. UIViewController内存管理