架构师说比起404我们更怕200错误

 更新时间:2022年12月23日 08:42:15   作者:小姐姐味道  
这篇文章主要为大家介绍了架构中404我们更怕200错误的解决及分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

少年,你在怀着非法的心态看一篇简短的硬核科普!

先抛问题:如何杀掉一个正在等待 TCP 连接的 Thread?

由于众所周知的原因,在国内使用 maven,会等待很长的时间来下载相应的 jar 包。

如果我们正在使用 IDEA,就经常容易卡住。当我们点击进度条的时候,无论是等待,还是取消,都需要等待比较长的时间来完成当前的网络请求。

除非我们立马把 IDEA 关掉,然后再重新打开它。

why?

因为你没法用代码杀掉一条处于连接状态的连接。操作系统没有有暴露这样的 API!

但你可以杀掉进程。当进程停止的时候,与之关联的所有连接都会被释放。但是你无法杀掉线程,因为线程正在 BLOCK 在某个连接之上,你需要先关掉这个连接才能让线程自动释放。

一般的连接工具包,都会提供 soTimeout 这个参数,用来配置超时。比如 MySQL 客户端:

jdbc:mysql://xxx.xx.xxx.xxx:3306/database?connectTimeout=60000&socketTimeout=60000

通过设置超时时间可以防止出现网络错误时一直等待的情况并缩短故障时间,防止死连接的产生。但如果连接没有设置超时呢?

它就会永远 Block 在那里!

在 Linux 上,有 tcpkill、killcx 等工具,可以杀掉一条处于 established 状态的连接。

以tcpkill为例,我们需要安装相应的工具包。

yum install dsniff -y

然后,使用netstat 或者 ss, 或者 lsof 等命令,找到要杀掉的连接。然后杀掉它。

tcpkill -9 -i eth0 host 10.0.1.197 and port 2222

执行了这样的操作之后,Thread 就能够自动正常关闭了。

那它是怎么实现的呢?

这又和老生常谈的 TCP 四次挥手有关了。

想要关掉一条连接,需要经过 FIN 包和 ACK 包做四次挥手。这个过程很麻烦,但不要忘了,我们还有 RST 包,它可以直接引起连接的关闭。

可惜的是,如果你想要发送 RST 包,那必须首先要知道交互时所使用的 SEQ 序列号,因为乱序的数据包将会被 操作系统直接丢弃。

所以,工具需要首先监听这个连接,然后获取其中的序列号。再拿着这个序列号,发起模拟的 RST 数据包。你的连接就这样断掉了。

墙,也是这么干的。

以上就是架构师说比起404我们更怕200错误的详细内容,更多关于架构404 200错误的资料请关注脚本之家其它相关文章!

相关文章

  • Jenkins 脚本命令行应用小结

    Jenkins 脚本命令行应用小结

    这篇文章主要介绍了Jenkins 脚本命令行应用总结,包括批量删除Jenkins 项目构建记录,非多分支项目及分支项目,文章结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 如何用idea+gitee来团队合作开发项目的教程

    如何用idea+gitee来团队合作开发项目的教程

    这篇文章主要介绍了如何用idea+gitee来团队合作开发项目,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • idea+git合并分支解决冲突及详解步骤

    idea+git合并分支解决冲突及详解步骤

    这篇文章主要介绍了idea+git合并分支解决冲突及详解步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Git如何修改已提交的commit注释

    Git如何修改已提交的commit注释

    这篇文章主要介绍了Git如何修改已提交的commit注释问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 浅析hosts 文件的作用及修改 hosts 文件的方法

    浅析hosts 文件的作用及修改 hosts 文件的方法

    hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的 IP 地址建立一个关联“ 数据库 ”。接下来通过本文给大家介绍hosts 文件的作用及修改 hosts 文件的方法,需要的朋友参考下吧
    2018-01-01
  • 声音验证码制作方法

    声音验证码制作方法

    收听验证码已经比较普遍了,使用户看不清楚的情况下可以通过耳朵来收听验证码,但网上搜了很久没看到有具体的制作方法,自己想了想,还是按自己的方法来实现了,呵呵。
    2009-06-06
  • 关于ANSI转义序列解读

    关于ANSI转义序列解读

    这篇文章主要介绍了关于ANSI转义序列的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 架构思维之缓存雪崩的灾难复盘

    架构思维之缓存雪崩的灾难复盘

    这篇文章主要介绍了架构思维中一次缓存雪崩的灾难复盘真实案例的分享,希望可以对大家在工作中有所启发,祝大家多多进步早日升职加薪
    2022-01-01
  • github 常用命令总结大全

    github 常用命令总结大全

    这里整理了github 常用命令的知识,希望能帮助使用GitHub的朋友快速掌握常用命令,有需要的朋友参考下
    2016-09-09
  • HTTP与HTTPS握手的那些事

    HTTP与HTTPS握手的那些事

    今天我总结了什么是HTTP三次握手,还有HTTPS握手的过程以及为什么HTTPS是安全的,需要的朋友可以参考下
    2017-05-05

最新评论