最近项目中遇到了问题,会偶然出现服务端返回不是客户端请求报文的情况 经过排查后发现,是客户端的http长链接网络库,在第一次发送超时的情况下,没有断开连接,而是用此长链接继续发送, A包发送但超时未响应,然后发送B包,这时收到了A包的响应,则就会认为A包的响应为B包的响应内容,这就导致了此后的htt ...
分类:
Web程序 时间:
2020-04-08 20:52:21
阅读次数:
81
Scrapy 使用了 Twisted 异步非阻塞网络库来处理网络通讯,整体架构大致如下(绿线是数据流向): Scrapy主要包括了以下组件: 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler)用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请 ...
分类:
其他好文 时间:
2020-04-05 18:28:55
阅读次数:
140
fd_set 使用数组实现,在内核中默认实现是 16个大小,但是他是long类型,每个元素64位,所以 16*64 =1024 个,select的瓶颈也就是1024个连接 所以遍历出来的对应数组就可以拿到文件描述符 epoll create 用来生成一个树的根节点、 epoll ctl ...
分类:
其他好文 时间:
2020-04-05 15:08:55
阅读次数:
66
关于CLOSE_WAIT和TIME_WAIT状态,服务器端都有可能出现,TIME_WAIT出现应该是短连接较多,需要通过修改内核参数解决,CLOSE_WAIT状态则是服务器程序可能有问题,服务器需要主动close,以及epoll多路复用模型中使用linger调整关闭等待时间 分析解决这类问题,关键在 ...
分类:
系统相关 时间:
2020-04-01 13:13:17
阅读次数:
109
import socket import select ''' kernel:Linux的操作系统 epoll:创造一个特殊的内存空间,tcp服务器和操作系统共用,将套接字列表放在该内存,不再使用轮询的方式遍历列表,而采用事件通知 轮询:开发上讲遍历称为轮询 事件通知: ''' def tcp_se ...
分类:
Web程序 时间:
2020-03-31 01:26:14
阅读次数:
95
运行环境: Win 7 JDK 8 + Redis 3.0.504 Spring Boot 2.2.2.RELEASE 一、为什么要使用Redis 速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件; 丰富的数据类型,Redis有8 ...
分类:
编程语言 时间:
2020-03-28 17:39:38
阅读次数:
79
【场景】客户端大量连接,如果采用多线程方式的话,线程上下文切换导致性能不佳。因此采用io多路复用。 一、上下文切换 对于单核CPU来说(对于多核CPU,此处就理解为一个核),CPU在一个时刻只能运行一个线程,当在运行一个线程的过程中转去运行另外一个线程,这个叫做线程上下文切换(对于进程也是类似)。 ...
分类:
其他好文 时间:
2020-03-28 16:16:39
阅读次数:
71
本节记录Windows下与epoll类似的机制IOCP(input outpout completion port)。对于单台电脑的多TCP连接请求,IOCP和epoll是比较好的选择。 1. 重叠IO 1.1 关键函数 由于IOCP的使用会用到较多重叠IO相关的函数,先记录一下重叠IO。所谓重叠I ...
分类:
其他好文 时间:
2020-03-26 19:51:02
阅读次数:
73
https://blog.csdn.net/jethai/article/details/52345302 应用层的负载均衡 master/worker结构:一个master进程,生成一个或多个worker子进程 nginx请求的连接方式epoll 是Linux下多路复用IO接口select/pol ...
分类:
Web程序 时间:
2020-03-16 21:56:10
阅读次数:
74
一、selectors模块简介 它的功能与linux的epoll,还是select模块,poll等类似;实现高效的I/O multiplexing, 常用于非阻塞的socket的编程中; 相当于封装好的select和epoll,适用于不同的平台,如果支持epoll的平台自动选择epoll,否则会找s ...
分类:
编程语言 时间:
2020-03-15 11:52:50
阅读次数:
70