php 实现 select系统调用

IO多路复用技术  这个功能被广泛使用,nginx redis nodejs 都在使用,多路是指多个客户端连接socket 复用 就是指复用小数几个进程

举个例子来理解IO多路复用

教室里有10个学生和1个老师,孩子不停的向老师提问,一个老师忙不过来了  学校只能给每位学生配一位老师,如果学生比作为客户端,教师当做成与客户端进行数据交互的服务器进程,则该教室的运营方式为多进程服务端的方式

有一天学校里来个牛逼老师,可以应对所有学生的回答,而且回答速度很快,不会让学生等待,现在一个教室只需要一位老师了,现在学生提问前必须举手,老师确认只有举手的学生提问后再回答问题,此时 这种方式就是I/O复用的方式运行

当启动select后 需要将三组不同的socket fd 加入到作为select的参数,fd集合也就是fd_set 三组fd_set 分别为 可读集合,可写集合 ,异常集合.这三组集合 有内核来维护,每当select 监控的这三个fd_set 有 有可读或可写或异常出现的时候,就会通知调用方,调用方调用select后,调用方就被阻塞,等待可读可写异常事件的发生,一旦有事件发生,需要将这三个集合 由内核态copy到用户态中,然后调用方通过轮询的方式遍历所有fd,从中读取出可读可写异常的fd

<?php
        $port = 9501;
        $sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
        socket_set_option($sock,SOL_SOCKET,SO_REUSEADDR,1);
        socket_bind($sock,0,$port);
        socket_listen($sock);
        //socket创建一把梭

        //将监听socket 加入到read fd set中去 因为select也要监听监听socket上发生的事件
        //比如有客户端连接过来 就监听到了
        $clients = [$
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值