swoole( 网络IO 八)

Ip+端口访问 ->

内核会检测到这个数据包 ->

socket的资源流就会被写在一个池子里

(里面只有一个server socket , 剩余的是其他的客户端,所以stream_select检测是否有可读之后,还需要判断下是否创建客户端连接还是发送消息)

 

问题:

客户端关闭了,为什么stream_select还是能检测到这个资源可读

因为客户端关闭了,但服务端中的sockets是一直存在与客户端连接信息,保持心跳检测。(长链接)

最大检测上限

Ulimit  -n  2084

扫描二维码关注公众号,回复: 10560009 查看本文章
   

也叫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;

发布了66 篇原创文章 · 获赞 2 · 访问量 4649

猜你喜欢

转载自blog.csdn.net/converoscar/article/details/104275775
今日推荐