phpsocket技巧(简单理解PHP之socket编程)

phpsocket技巧(简单理解PHP之socket编程)(1)

在上一篇文章《简单理解PHP之socket编程(二)》中,我们是使用非阻塞模式去实现单一服务端连接多个客户端的,即先使用函数socket_set_nonblock()设置套接字为非阻塞模式,然后将连接到服务端的客户端连接放到一个数组中,最后通过遍历客户端数组,分别与每一个客户端进行数据交互。

本文我们将介绍,如何通过使用PHP函数socket_select(),来实现单一服务端连接多个客户端。

首先,我们来看下socket_select()是做什么的。

phpsocket技巧(简单理解PHP之socket编程)(2)

上图是从PHP手册上截取下来的。从图中语句,我们可以得知,使用socket_select()函数,我们可以在指定的套接字上调用系统的select机制,从而实现I/O 多路复用。

  1. 当用户进程调用了select,那么整个进程会被block(阻塞);

  2. 而同时,kernel会“监视”所有select负责的socket;

  3. 当任何一个socket中的数据准备好了,select就会返回;

  4. 这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程。

所以,I/O 多路复用的特点是通过一种机制一个进程能同时等待多个文件描述符,而这些文件描述符(套接字描述符),其中的任意一个进入读就绪状态,select()函数就可以返回。

代码实现如下:

服务端server.php

phpsocket技巧(简单理解PHP之socket编程)(3)

客户端与之前一样,保持不变。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页