架构师说比起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错误的资料请关注脚本之家其它相关文章!

相关文章

  • 基于HTTP协议的一些实时数据获取技术详解

    基于HTTP协议的一些实时数据获取技术详解

    HTTP 协议是一个标准,定义了web客户端如何与服务器对话,以及数据如何从服务器传回客户端,下面这篇文章主要给大家介绍了关于基于HTTP协议的一些实时数据获取技术的相关资料,需要的朋友可以参考下
    2018-07-07
  • 基于IntelliJ IDEA/Android Studio插件开发指南(推荐)

    基于IntelliJ IDEA/Android Studio插件开发指南(推荐)

    Android Studio是基于Intellij IDEA开发的,所以开发Android Studio的插件,其实就是开发IDEA的插件。根据官方推荐,使用IDEA IDE来开发IDEA插件,本文给大家介绍插件开发的基本流程,感兴趣的朋友一起看看吧
    2021-10-10
  • 深入剖析从输入URL到页面显示过程原理

    深入剖析从输入URL到页面显示过程原理

    这篇文章主要为大家深入剖析了从输入URL到页面显示这中间发生的过程原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 程序开发中的几个请不要相信

    程序开发中的几个请不要相信

    虽不算什么高深的东西,但至少也算一点点小经验,分享分享吧,如果您是高手,而且您还有点时间,那么请你耐心看完整篇文章,然后再帮忙指点指点,留下您的经验,我也好学习学习。
    2009-04-04
  • openlayers 模仿高德箭头导航路线图的代码详解

    openlayers 模仿高德箭头导航路线图的代码详解

    这篇文章主要介绍了openlayers 模仿高德箭头导航路线图的示例代码,主要包括原始数据、起点/终点寻找、起点和终点样式函数,结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 在PB中如何让用户只能修改新增的数据

    在PB中如何让用户只能修改新增的数据

    一些数据库系统或者某些数据表只允许用户添加数据,而不能修改或者删除以往的记录,此时我们就必须在程序进行控制。有些程序员通过不显示以往的数据来保证,下面我们介绍一种既可以看到原始记录,有不容许用户修改这些记录的方法
    2008-11-11
  • Python虽然很火找工作为什么这么难

    Python虽然很火找工作为什么这么难

    这两年因为第三波人工智能热潮让 Python火了一把,让中小学生、非程序员(产品经理、运营)都加入到了学习Python的行列,那之前Python火吗
    2019-06-06
  • 编程人员阅读代码的一些小技巧分享

    编程人员阅读代码的一些小技巧分享

    阅读别人的代码作为研发人员是一件经常要做的事情。一个是学习新的编程语言的时候通过阅读别人的代码是个最佳的学习方法,另外是积累编程经验。
    2011-01-01
  • SpringSecurity框架简介及与shiro特点对比

    SpringSecurity框架简介及与shiro特点对比

    这篇文章是SpringSecurity框架的入门篇,主要为大家介绍了SpringSecurity框架简介及与shiro优缺点对比有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-03-03
  • .gitignore文件作用及使用方法详解

    .gitignore文件作用及使用方法详解

    这篇文章主要为大家介绍了.gitignore文件作用及使用方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论