
im
varyall
这个作者很懒,什么都没留下…
展开
-
IM群聊消息如此复杂,如何保证不丢不重?
1、前言群聊已经成为主流IM软件的基本功能,不管是QQ群、还是微信群,一个群友在群内发了一条消息,那么对于IM服务器来说需要保证:在线的群友能第一时间收到消息;离线的群友能在登陆后收到消息。由于“消息风暴扩散系数”的存在(概念详见《IM单聊和群聊中的在线状态同步应该用“推”还是“拉”?》),群消息的复杂度要远高于一对一的单聊消息。群消息的实时性、可达性、离线消息是今天将要讨论的核心话题。2、IM开...转载 2018-05-05 18:14:16 · 6649 阅读 · 1 评论 -
Haproxy 8种算法+Session共享
Haproxy有8种负载均衡算法(balance),分别如下:1.balance roundrobin # 轮询,软负载均衡基本都具备这种算法2.balance static-rr # 根据权重,建议使用3.balance leastconn # 最少连接者先处理,建议使用4.balance source # 根据请求源IP,建议使用5.balance uri # 根据请求的URI...转载 2018-05-23 17:15:45 · 970 阅读 · 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 评论 -
图解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 评论 -
利用Netty构建自定义协议的通信
在复杂的网络世界中,各种应用之间通信需要依赖各种各样的协议,比如:HTTP,Telnet,FTP,SMTP等等。在开发过程中,有时候我们需要构建一些适应自己业务的应用层协议,Netty作为一个非常优秀的网络通信框架,可以帮助我们完成自定义协议的通信。一般而言,我们制定的协议需要两个部分:Header : 协议头部,放置一些Meta信息。Content : 应用之间交互的信息主体。例如:| Vers...转载 2018-06-14 22:34:21 · 4390 阅读 · 7 评论 -
netty4用最简单的协议解决一个半包问题
有时候简化实现别人的代码,有助于你更好的理解代码,不要一味地读源代码。问题来源客户端往服务器发送小文件解决思路1、使用netty(废话)2、只是用ByteBuf3、自定义一种协议,用最小的网络代价完成数据传送实现其实netty有很多的定义好的协议来解决各种各样的问题,这篇文章来自《netty权威指南》作者李林峰,详细介绍了netty的编解码框架,以及一些常用的编解码协议。在解决这个问题的时候,我遇...转载 2018-06-15 00:00:40 · 1149 阅读 · 0 评论 -
netty实战-自定义解码器处理半包消息
概述在李林锋的Netty系列之Netty编解码框架分析中介绍了各种解码器,也推荐组合LengthFieldBasedFrameDecoderByteToMessageDecoder12这两个解码器来处理业务消息。但是有时候为了灵活性,会直接选择继承ByteToMessageDecoder1来处理业务消息,但是直接继承ByteToMessageDecoder,则需要自己处理半包问题。在李林锋的【n...转载 2018-06-15 00:01:31 · 744 阅读 · 0 评论 -
Netty 超时机制及心跳程序实现
Netty 超时机制的介绍Netty 的超时类型 IdleState 主要分为:ALL_IDLE : 一段时间内没有数据接收或者发送READER_IDLE : 一段时间内没有数据接收WRITER_IDLE : 一段时间内没有数据发送在 Netty 的 timeout 包下,主要类有:IdleStateEvent : 超时的事件IdleStateHandler : 超时状态处理ReadTimeout...转载 2018-06-19 12:35:19 · 751 阅读 · 0 评论 -
大规模IM在线用户的计算和数据存储方案
用户模型以及概念 月活量:基本上是总用户量,一个月不活动的用户基本上是死用户 日活量:一天中大于一定活跃时间的用户 峰值用户:一天中用户在线最高峰的用户总量 峰值并发用户:峰值用户可以同时在一秒钟发出一条消息的用户业务消息的计算模型当前假设为简单的单一业务,实际情况会更复杂 1、如果一秒钟处理1000笔请求(每条都进行存储),那么一天的数据量是:24*60*60*1000=8640万;如果每秒1万...转载 2018-06-26 20:50:45 · 2177 阅读 · 0 评论