socket_select
在指定的超时套接字数组上运行select()系统调用
PHP 4.0.1及以上版本。
socket_select 函数用于等待 socket 上的数据读写事件,它会监听多个 socket 连接的状态变化(如是否有数据可读,是否可以写入数据,是否有异常事件发生)。当指定的事件发生时,函数返回,并告知哪些 socket 可以进行操作。
socket_select(array &$read, array &$write, array &$except, int $tv_sec, int $tv_usec)
成功时返回准备好事件的 socket 数量。如果超时或发生错误则返回 0 或 -1。
<?php
// 创建 socket
$socket1 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$socket2 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
<p>// 设置连接超时时间<br>
socket_connect($socket1, '127.0.0.1', 8080);<br>
socket_connect($socket2, '127.0.0.1', 8081);</p>
<p>// 创建数组用于监视事件<br>
$read = array($socket1, $socket2);<br>
$write = null;<br>
$except = null;</p>
<p>// 调用 socket_select 等待事件<br>
$modified_sockets = socket_select($read, $write, $except, 0, 500000);</p>
<p>// 判断是否有准备好的 sockets<br>
if ($modified_sockets > 0) {<br>
echo "有事件发生\n";<br>
// 处理准备好的 socket<br>
foreach ($read as $socket) {<br>
// 读取数据等<br>
}<br>
} else {<br>
echo "超时或出错\n";<br>
}<br>
?><br>
该示例展示了如何使用 socket_select 来监听多个 socket 连接的状态。在这个例子中,我们创建了两个 socket 连接,连接到本地的 8080 和 8081 端口。然后我们使用 socket_select 来等待这些 socket 是否有数据可读。函数的返回值告诉我们哪些 socket 发生了事件。