首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

要做年薪100万的架构师,必会哪些知识点,看这篇就行了

要做年薪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列表。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200702A0OWST00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券