netty
文章平均质量分 91
LzwGlory
坚持自己的路
展开
-
Netty 介绍
本指南对Netty 进行了介绍并指出其意义所在。1. 问题现在,我们使用适合一般用途的应用或组件来和彼此通信。例如,我们常常使用一个HTTP客户端从远程服务器获取信息或者通过web services进行远程方法的调用。然而,一个适合普通目的的协议或其实现并不具备其规模上的扩展性。例如,我们无法使用一个普通的HTTP服务器进行大型文件,电邮信息的交互,或者处理金融信息转载 2015-04-30 17:07:00 · 776 阅读 · 0 评论 -
Netty系列三:netty线程模型
netty使用reactor反应堆线程模型。一、Reactor模型单线程模型如下: 用户发起IO操作到事件分离器事件分离器调用相应的处理器处理事件事件处理完成,事件分离器获得控制权,继续相应处理二、Reactor模型多线程模型如下: 但单线程的Reactor模型每一个用户事件都在一个线程中执行: - 性能有极限,不能处理成百上千的事件 - 当负荷达到一定程度时,性能将会下降 - 某一个事件处理器发...转载 2018-05-08 16:08:19 · 466 阅读 · 0 评论 -
用Netty开发中间件:高并发性能优化
用Netty开发中间件:高并发性能优化最近在写一个后台中间件的原型,主要是做消息的分发和透传。因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本。Netty果然效率很高,不用做太多努力就能达到一个比较高的tps。但使用过程中也碰到了一些问题,个人觉得都是比较经典而在网上又不太容易查找到相关资料的问题,所以在此总结一下。1.Context Switch过...转载 2018-05-04 18:32:18 · 888 阅读 · 0 评论 -
【Netty基础】Netty的高性能及NIO的epoll空轮询bug
Selector BUG出现的原因若Selector的轮询结果为空,也没有wakeup或新消息处理,则发生空轮询,CPU使用率100%,Netty的解决办法对Selector的select操作周期进行统计,每完成一次空的select操作进行一次计数,若在某个周期内连续发生N次空轮询,则触发了epoll死循环bug。重建Selector,判断是否是其他线程发起的重建请求,若不是则将原SocketCh...转载 2018-05-04 17:53:52 · 1263 阅读 · 0 评论 -
【面试题】Netty相关
1.BIO、NIO和AIO的区别?BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO:一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器...转载 2018-05-04 17:52:29 · 781 阅读 · 0 评论 -
Netty 缓存buffer介绍及使用
Netty 的缓冲 API 有两个接口一: ByteBuf 当需要与远程进行交互时,需要以字节码发送/接收数据。由于各种原因,一个高效、方便、易用的数据接口是必须的,而 Netty 的 ByteBuf 满足这些需求,ByteBuf 是一个很好的经过优化的数据容器, 我们可以将字节数据有效的添加到 ByteBuf 中或从 ByteBuf 中获取数据。ByteBuf 有 2 部分:一个用于读,一个用于...转载 2018-04-03 10:14:43 · 2138 阅读 · 0 评论 -
Netty 实现聊天功能
Netty 是一个 Java NIO 客户端服务器框架,使用它可以快速简单地开发网络应用程序,比如服务器和客户端的协议。Netty 大大简化了网络程序的开发过程比如 TCP 和 UDP 的 socket 服务的开发。更多关于 Netty 的知识,可以参阅《Netty 4.x 用户指南》https://github.com/waylau/netty-4-user-guide下面,就基于 Netty ...转载 2018-03-23 19:15:18 · 617 阅读 · 0 评论 -
Netty 长连接服务
推送服务还记得一年半前,做的一个项目需要用到 Android 推送服务。和 iOS 不同,android 生态中没有统一的推送服务。Google 虽然有 Google Cloud Messaging ,但是连国外都没统一,更别说国内了,直接被墙。所以之前在 Android 上做推送大部分只能靠轮询。而我们之前在技术调研的时候,搜到了 jPush 的博客,上面介绍了一些他们的技术转载 2017-08-29 12:10:38 · 334 阅读 · 0 评论 -
基于Netty与RabbitMQ的消息服务
Netty作为一个高性能的异步网络开发框架,可以作为各种服务的开发框架。前段时间的一个项目涉及到硬件设备实时数据的采集,采用Netty作为采集服务的实现框架,同时使用RabbitMQ作为采集服务和各个其他模块的通信消息队列,整个服务框架图如下:将业务代码和实际协议解析部分的代码抽离,得到以上一个简单的设计图,代码开源在GitHub上,简单介绍下NettyMQServer采集转载 2015-04-30 18:46:40 · 1356 阅读 · 0 评论 -
Netty系列之Netty 服务端创建
1. 背景1.1. 原生NIO类库的复杂性在开始本文之前,我先讲一件自己亲身经历的事:大约在2011年的时候,周边的两个业务团队同时进行新版本开发,他们都需要基于NIO非阻塞特性构建高性能、异步和高可靠性的底层通信框架。当时两个项目组的设计师都咨询了我的意见,在了解了两个项目团队的NIO编程经验和现状之后,我建议他们都使用Netty构建业务通信框架。令人遗憾的是其中1个项目转载 2015-04-30 17:08:39 · 1328 阅读 · 0 评论 -
[netty]--最通用TCP黏包解决方案:LengthFieldBasedFrameDecoder和LengthFieldPrepender
前面已经说过: TCP以流的方式进行数据传输,上层应用协议为了对消息进行区分,往往采用如下4种方式。 (1)消息长度固定:累计读取到固定长度为LENGTH之后就认为读取到了一个完整的消息。然后将计数器复位,重新开始读下一个数据报文。(2)回车换行符作为消息结束符:在文本协议中应用比较广泛。(3)将特殊的分隔符作为消息的结束标志,回车换行符就是一种特殊的结束分隔符。(4)通过在消息头中定义长度字段来...转载 2018-05-08 16:49:28 · 987 阅读 · 0 评论