TCP协议
TCP作为面向连接的可靠传输协议,被广泛应用于各种场景,也是在面试时经常被提及的内容。学习了解TCP协议也是学习网络必不可少的一步,作者从个人的角度对TCP的一些知识进行了梳理,也是对学习的一个记录,有不对的地方也欢迎大家进行交流。
TCP的三次握手过程
TCP的四次挥手过程
这里使用golang写的tcp服务端和客户端代码,用wireshark抓包进行验证
服务端代码
12345678910111213141516171819202122232425262728293031323334353637383940package mainimport ( "fmt" "net")func main() { // 监听TCP端口 8080 listener, err := net.Listen("tcp", "localhost:9999") if err != nil { fmt.Println("Error listening:", err) return & ...
HTTP压力测试工具
在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。
压测相关术语
响应时间(RT) :指系统对请求作出响应的时间.
吞吐量(Throughput) :指系统在单位时间内处理请求的数量
QPS每秒查询率(Query Per Second) :“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
TPS(TransactionPerSecond):每秒钟系统能够处理的交易或事务的数量
并发连接数:某个时刻服务器所接受的请求总数
wrkwrk 是一款开源的HTTP性能测试工具,它和上面提到的ab同属于HTTP性能测试工具,它比ab功能更加强大,可以通过编写lua脚本来支持更加复杂的测试场景。
Mac下安装:brew install wrk
常用命令参数:
1234567-c --conections:保持的连接数-d --duration:压测持续时间(s)-t --threads:使用的线程总数-s - ...
MySql的字段长度
每次在创建mysql表字段的时候,你是否想过字段长度到底多少合适?字母数字中文或者其他外文甚至表情字符各自占有的长度到底是多少?
这篇文章我是用的是MySQL 8.0.24实际测试并记录的内容,也仅测试了常用的一些字段
varchar这个字段的长度 测试发现最大长度是多少存储的字符串长度个数就是多少
text此字段无法设置长度,所以使用这个字段的时候长度就没有限制
time这个字段我在写这篇文章时基本没有用过,当长度设为1时默认格式是00:00:01.0(最后的小数点只能1位数字),当长度设为2时默认格式是00:00:01.00(最后的小数点只能2位数字),因此可以推测出小数点后保留的是毫秒时间,字段长度保留的越长,那么时间就约精确。接下来我直接设置长度为20,报这样的错误1426 - Too-big precision 20 specified for 'name'. Maximum is 6.,这样就知道了最大长度为6
tinyint这个字段我用的就非常频繁了,最多的就是状态之类的,占用空间较小,常用于存储布尔值(0或1)或其他仅需要表示少量离散值的情况,但是这 ...
扫码登录
扫码登录基本不可能自己实现,会非常的麻烦
那么如果借助已有的工具来实现呢?比如QQ互联,不过你需要去官网申请资格
要是想微信扫码登录,那么你可以通过公众号,但是公众号也需要去认证申请,也不是很方便
好像钉钉也有扫码登录,可能简单点,但是我没有去研究过,公司企业做钉钉的话我觉得比较合适
微信现在基本每个人都有,必不可缺的一个应用了,那么通过微信扫码来实现登录看上去是最好的选择,那么有什么方式可以非常简单的来实现呢?
我就是给你们介绍这种方式
微信扫码登录需要借助 WxPusher微信推送服务
什么是WxPusherWxPusher (微信推送服务)是一个使用微信公众号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到微信上,无需安装额外的软件,即可做到信息实时通知。 你可以使用WxPusher来做服务器报警通知、抢课通知、抢票通知,信息更新提示等。
demo演示程序你可以访问演示程序,体验功能:https://wxpusher.zjiecode.com/demo/
演示程序源代码:https://github.com/wxpusher/wxpusher-sdk-j ...
模拟TCP客户端压测TCP服务端
为什么写了这个呢?
也是因为在工作中,团队中的成员需要压测tcp服务端,但是没有找到合适的压测工作,所以就用代码自己来实现一个简单的压测程序。
原本同时是想通过java或者php基于swoole的hyperf框架来实现,最终他是用了hyperf实现的,但是因为不好部署,所以我用go帮忙实现了以下。
这里其实也有问题的,自己随便写的一个小工具,功能什么的并不完善也不强大,不过你可以看看这个思路。
csv文件格式
login
heartbeat
6822001800013201062961000201011076332E3031303030000037E7
680D02810003320106296100020100FBD7
6822001800013201062961000301011076332E303130303000006A72
680D02810003320106296100030100AA17
6822001800013201062961000401011076332E30313030300000FC58
680D02810003320106296100040 ...
英雄联盟SGP接口
英雄联盟客户端本地会起一个http服务端,客户端是CEF做的,整个就是一个浏览器,显示的内容也就是加载了html而已
所有的操作都是通过请求http接口完成的,请求的接口就是本地的http服务,那么本地的http服务端又是请求到哪的呢?
那么下面介绍的接口才是真正请求到的地方,也就是英雄联盟的服务器接口
刷新sgp1) 接口 HTTP POST (刷新Authorization)/session-external/v1/session/refresh
2) 请求参数(JSON):123{ "lst":"eyJraWQiOiJzMSIsImFsZyI6IlJTNTEyIn0.eyJzY3AiOiJMT0wiLCJzdWIiOiI5M2RhN2Y0Zi0zMGQwLTU5MjEtODFjYi04OThjZWU3NGFkYjYiLCJwcm9kdWN0IjoiTE9MIiwicGFydGlkIjoiMjY0NTYxMzkwOCIsImxpZCI6bnVsbCwiY25hbWUiOiJsY3UiLCJoYmMiOiJuYW4iLCJhY3RpZC ...