
netty
varyall
这个作者很懒,什么都没留下…
展开
-
netty 学习笔记
netty通过Reactor模型基于多路复用器接收并处理用户请求,内部实现了两个线程池,boss线程池和work线程池,其中boss线程池的线程负责处理请求的accept事件,当接收到accept事件的请求时,把对应的socket封装到一个NioSocketChannel中,并交给work线程池,其中work线程池负责请求的read和write事件。在Netty里,Channel是通讯的载转载 2017-03-24 17:02:34 · 364 阅读 · 0 评论 -
大规模IM在线用户的计算和数据存储方案
用户模型以及概念 月活量:基本上是总用户量,一个月不活动的用户基本上是死用户 日活量:一天中大于一定活跃时间的用户 峰值用户:一天中用户在线最高峰的用户总量 峰值并发用户:峰值用户可以同时在一秒钟发出一条消息的用户业务消息的计算模型当前假设为简单的单一业务,实际情况会更复杂 1、如果一秒钟处理1000笔请求(每条都进行存储),那么一天的数据量是:24*60*60*1000=8640万;如果每秒1万...转载 2018-06-26 20:50:45 · 2177 阅读 · 0 评论 -
Netty 超时机制及心跳程序实现
Netty 超时机制的介绍Netty 的超时类型 IdleState 主要分为:ALL_IDLE : 一段时间内没有数据接收或者发送READER_IDLE : 一段时间内没有数据接收WRITER_IDLE : 一段时间内没有数据发送在 Netty 的 timeout 包下,主要类有:IdleStateEvent : 超时的事件IdleStateHandler : 超时状态处理ReadTimeout...转载 2018-06-19 12:35:19 · 751 阅读 · 0 评论 -
netty实战-自定义解码器处理半包消息
概述在李林锋的Netty系列之Netty编解码框架分析中介绍了各种解码器,也推荐组合LengthFieldBasedFrameDecoderByteToMessageDecoder12这两个解码器来处理业务消息。但是有时候为了灵活性,会直接选择继承ByteToMessageDecoder1来处理业务消息,但是直接继承ByteToMessageDecoder,则需要自己处理半包问题。在李林锋的【n...转载 2018-06-15 00:01:31 · 744 阅读 · 0 评论 -
netty4用最简单的协议解决一个半包问题
有时候简化实现别人的代码,有助于你更好的理解代码,不要一味地读源代码。问题来源客户端往服务器发送小文件解决思路1、使用netty(废话)2、只是用ByteBuf3、自定义一种协议,用最小的网络代价完成数据传送实现其实netty有很多的定义好的协议来解决各种各样的问题,这篇文章来自《netty权威指南》作者李林峰,详细介绍了netty的编解码框架,以及一些常用的编解码协议。在解决这个问题的时候,我遇...转载 2018-06-15 00:00:40 · 1149 阅读 · 0 评论 -
利用Netty构建自定义协议的通信
在复杂的网络世界中,各种应用之间通信需要依赖各种各样的协议,比如:HTTP,Telnet,FTP,SMTP等等。在开发过程中,有时候我们需要构建一些适应自己业务的应用层协议,Netty作为一个非常优秀的网络通信框架,可以帮助我们完成自定义协议的通信。一般而言,我们制定的协议需要两个部分:Header : 协议头部,放置一些Meta信息。Content : 应用之间交互的信息主体。例如:| Vers...转载 2018-06-14 22:34:21 · 4390 阅读 · 7 评论 -
【转】Netty之解决TCP粘包拆包(自定义协议)
1、什么是粘包/拆包 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。2、解决办法 ...转载 2018-06-14 16:43:22 · 682 阅读 · 0 评论 -
图解Netty之Pipeline、channel、Context之间的数据流向。
以下所绘制图形均基于Netty4.0.28版本。一、connect(outbound类型事件) 当用户调用channel的connect时,会发起一个outbound类型的事件,该事件将在pipeline中传递(pipeline.connect),首先由tail handler处理,该handler只是将事件透传给下一个outbound类型的用户Handler(如果有),事件依次传递...转载 2018-06-21 21:50:37 · 1085 阅读 · 0 评论 -
im 系统架构问题
1、android,ios,web端调用haproxy2、比如客户端发了消息,然后服务端返回过程中断掉了网,出现了未发送的红点,这个时候如何确定保证唯一性,也就是不能发重复的消息,去重?ios和android都有一个唯一id生成功能,能够保证去重3、比如刚开始用户a在 im1机器上面,突然间网络断开了,等im1连接到了im2机器上面的时候这个时候用户是和im1交互呢,还是和im2交互呢?每个用户和...转载 2018-05-23 18:06:02 · 1632 阅读 · 0 评论 -
IM群聊消息如此复杂,如何保证不丢不重?
1、前言群聊已经成为主流IM软件的基本功能,不管是QQ群、还是微信群,一个群友在群内发了一条消息,那么对于IM服务器来说需要保证:在线的群友能第一时间收到消息;离线的群友能在登陆后收到消息。由于“消息风暴扩散系数”的存在(概念详见《IM单聊和群聊中的在线状态同步应该用“推”还是“拉”?》),群消息的复杂度要远高于一对一的单聊消息。群消息的实时性、可达性、离线消息是今天将要讨论的核心话题。2、IM开...转载 2018-05-05 18:14:16 · 6649 阅读 · 1 评论 -
Netty为啥可靠(二)
Selector空轮询处理在NIO中通过Selector的轮询当前是否有IO事件,根据JDK NIO api描述,Selector的select方法会一直阻塞,直到IO事件达到或超时,但是在Linux平台上这里有时会出现问题,在某些场景下select方法会直接返回,即使没有超时并且也没有IO事件到达,这就是著名的epoll bug,这是一个比较严重的bug,它会导致线程陷入死循环,会让CP转载 2017-05-11 21:35:08 · 641 阅读 · 0 评论 -
通过零拷贝实现有效数据传输
很多 Web 应用程序都会提供大量的静态内容,其数量多到相当于读完整个磁盘的数据再将同样的数据写回响应套接字(socket)。此动作看似只需较少的 CPU 活动,但它的效率非常低:首先内核读出全盘数据,然后将数据跨越内核用户推到应用程序,然后应用程序再次跨越内核用户将数据推回,写出到套接字。应用程序实际上在这里担当了一个不怎么高效的中介角色,将磁盘文件的数据转入套接字。数据每遍历用户内核一次,...转载 2019-06-05 21:10:24 · 795 阅读 · 0 评论