Ip+端口访问 -> 内核会检测到这个数据包 -> socket的资源流就会被写在一个池子里 (里面只有一个server socket , 剩余的是其他的客户端,所以stream_select检测是否有可读之后,还需要判断下是否创建客户端连接还是发送消息)
问题: 客户端关闭了,为什么stream_select还是能检测到这个资源可读 因为客户端关闭了,但服务端中的sockets是一直存在与客户端连接信息,保持心跳检测。(长链接) |
|
最大检测上限 |
Ulimit -n 2084 |
也叫reactor模型 单线程的也叫epoll Select => stream_select 监视多个socket,循环监测,主动 Epoll=>event 事件类型,触发被动
异步IO != reactor (异步Io有多种方法) Reactor = 异步IO |
|
传统模型 早期的预派生子进程模型 fpm |
client client server server 一对一,阻塞
程序启动后就会创建n个进程。每个进程进入accept,等待新的连接的进入 当客户端连接到服务器时,其中一个子进程会被唤醒,开始处理客户端的请求,并且不再接收tcp连接 当连接关闭时,子进程才会释放,重新进入aeecpt,参与处理新的连接。 优势在于可以复用进程
|
Reactor模式 |
客户(提需求) 经理(统筹,分发任务) 多个员工(处理事情)
event会循环监测sockets,多的话,会浪费cpu资源 |
单reactor多线程、进程模型(适合非阻塞模型) |
小型公司 只有一个员工 所以处理业务需要排队,一次只能做一件事
client客户端发送请求;epoll会监控请求,dispatch会分发请求 ; 建立连接accept,并把请求处理分发给不同的工作进程read send; worker进程池的工作进程帮助我们处理请求
什么是进程池? 集合,管理的是进程的pid。 reactor主进程里会有个worker_pids,记录进程池的pid; |
swoole( 网络IO 八)
猜你喜欢
转载自blog.csdn.net/converoscar/article/details/104275775
今日推荐
周排行