Netty 百万连接协议解析

Netty 百万连接协议解析

Netty 是一个高性能的网络框架,被广泛的运用在底层的网络传输,在保持高性能的同时也保证了API的简单易用性,可谓是广大Java er 网络编程必选神器

在IOT的领域里面,为了更好的采集更多更准确的数据,业界也常常使用的一种方案保持长连接,然后保持长连接的手段就是使用tcp协议
来建立终端与server之间的一个桥梁.由于tcp 是一个面向连接的流协议,当初在设计tcp的时候为了能更好地发挥它的性能提高它的吞吐,tcp 可能会将一些
小的数据包包装一次大的数据报,或者将一些大的数据报才分成小的数据包,然后在发送给服务端. 从而就需要服务端进行一个粘包和半包的处理.

在实现粘包和半包处理之前,我们先了解一下netty的架构,这将帮助我们后面更好的理解
netty 他是一个reactor 模式的网络框架,我们传统io方式,将一个连接我们开启一个线程去处理这些任务,但是这样遇到一个情况就是,当连接过多的时候,我们服务端
线程的数量也会增多,这对于os来说是压力对资源也是一种浪费效率低下,为了解决这样问题,所以一些新的io方式出现,io多路复用,使用一个线程,来进行所有连接的一个监听
当在相应的连接上面有我们想要的事件(可读事件,可写事件…)然后触发我们的处理逻辑,这样就成功的避免到每一个连接开一个线程的这种模式.

 

当一个新的连接连接到server端的时候,首先是acceptor接受到这个请求,然后将该请求派发给后面的线程池,然后线程池选择一个线程对数据进行一个解码,计算等处理.acceptor仅仅需要一个线程即可处理客户端的很多连接

要解决tcp粘包的问题,其实就是在每一个数据包的前面加上一个特殊的字符,然后服务端通过特殊字符进行一个分解. 当然还有其他方式,比如放入消息的长度,后面通过长度来决定一下消息的结束. 我们这里采用的是第一种加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值