时间:2021-07-01 10:21:17 帮助过:4人阅读
程序是从遍历连接的客户端是不是serversocket来判断连接, 遍历每个客户端都fread来读,根据读的结果是FALSE还是0判断是不是断开连接了,但是上面的程序一运行,cpu就上升,然后机器就卡住了,是不是这种判断连接有断开的方式有问题?
这是php网站上关于stream_select 的例子
http://php.com/manual/en/function.stream-socket-server.php
程序是从遍历连接的客户端是不是serversocket来判断连接, 遍历每个客户端都fread来读,根据读的结果是FALSE还是0判断是不是断开连接了,但是上面的程序一运行,cpu就上升,然后机器就卡住了,是不是这种判断连接有断开的方式有问题?
运行这个例子,报了一堆错误,你没报错?
我修改了一下
$master = array();
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
$master[] = $socket;
$read = $master;
while (1) {
$read = $master;
$_w = $_e = null;
$mod_fd = stream_select($read, $_w, $_e, 0);
foreach ($read as $rstream) {
$conn = stream_socket_accept($socket);
if ($conn) {
fwrite($conn, "Hello! The time is " . date("n/j/Y g:i a") . "\n");
$sock_data = fread($conn, 1024);
// var_dump($sock_data);
if ($sock_data === 0) {
} elseif ($sock_data === false) {
echo "Something bad happened" . PHP_EOL;
} else {
fwrite($conn, "You have sent :[" . $sock_data . "]\n");
}
fclose($conn);
}
}
}