要做年薪100万的架构师,必会哪些知识点,看这篇就行了
周围的朋友好多人问到我现在做程序员已经到达瓶颈了,不知道学什么才能技术上更进步。自己已经达到高级水平,再上一个台阶看起来很难。
一个年薪百万的程序员应具备哪些能力,首先能独立带领产品或业务向前发展,并在产品或业务的规划上具备一定的能力。
这里我强调一句,是独立带领的能力,并且有一定的产品和业务的规划考核,比如:对业务的了解程度,是否可以掌控,这一条很多人会忽视业务的重要性。分布式、高并发等架构设计领域是否有自己的独到见解等。
互联网技术日新月异,对于很多最新的搜索技术、消息队列、分布式集群等方面又有什么样的特点。都要有一个清晰的把握度。自己读过多少源码。netty粘包分包现象全解析之如何避免socket攻击,并发编程,线程池源码分析,大型系统经验,大型网站数据瓶颈之数据库分库分表实战经验,电商秒杀系统,高并发如何避免超卖,高性能mysql读写分离架构设计能力,
互联网企业级别监控系统之sql语句监控,高性能bio和nio区别
这些你是否真正精通?
我这篇文章主要讲netty粘包分包现象全解析之如何避免socket攻击。
什么是Netty
Netty是由jboss提供的框架。Netty提供异步的、通过事件来驱动的网络应用程序框架和工具,用以快速开发高可靠性、高性能的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发
Netty有一个简单但强大的状态横型,并完美映射到ChannelInboundHandler的各个方法。下面
是Channel生命周期四个不同的状态:
1.channelUnregistered
2.channe1Registered
3.channelActive
Channel的状态在其生命周期中变化,因为状态变化需要触发,下面显示了Channel状态变化
粘包分包
客户端发送多个请求包给服务端,这些包合成一个就是粘包,分包是客户端一个请求包拆分成多个请求。
我们新建一个NettyServer的Java文件
然后建立消息处理类
好的,服服务端代码已经写完,我们再写一个客户端。
测试一下,打印出信息,可以看到拆包粘包的现象。
怎么解决粘包分包现象?
如果客户端和服务器端对应了一种稳定的标准数据结构,就把这个问题解决了。加上协议头和长度判断,包头,模块号,命令号,昌都,数据本身。
我们修改客户端代码
服务器端怎么处理?
我们先定义decode类
我们的服务代码改一下
然后在监听器把数据打印出来
如何解决socket攻击
加入单位时间能连接的Socket数量,单位时间以两秒为准效果不错,比如2秒内只能500个连接,这就可以很好的控制 Socket列表 的长度
引入IP黑名单,当一个IP超过10次非法连接后,将其IP拉黑,拉黑后任何从这个IP来的连接直接就Close掉,这样他怎么来连接也没影响了
改进 Socket列表, 只用一个 Socket列表 由于要处理线程安全的问题,在超多线程的环境下必然导致线程争用 Socket列表 的情况,这样多线程的效率就大打折扣了
所以我们可以使用双socket列表。
领取专属 10元无门槛券
私享最新 技术干货