PHP检测TCP客户端断开连接

时间:2015-06-24 14:45:30

标签: php sockets tcp detection disconnect

我启动并运行了一个TCP服务器,它同时支持许多客户端连接,以及读取和发送数据。但是,当客户端关闭连接时,服务器上会有一个延迟来检测断开连接的客户端。

//tr[@class="ListRow1" and contains(td/a, "Media Analyst")]/td/input[@value="deactivate"]

编辑I: 我刚刚在代码中添加了调试打印。当单个客户端断开连接时,服务器将从// TCP socket created here $clients = array($socket); while (true) { $read = $clients; // Copy of $clients $write = NULL; $except = NULL; $num_changed_sockets = socket_select($read, $write, $except, NULL); if ($num_changed_sockets === false) { // ... } else if ($num_changed_sockets > 0) { // Something changed printb("In here."); // EDIT if (in_array($socket, $read)) { // For new connections and removing host from the $clients copy $newsock = socket_accept($socket); if ($newsock !== false) { printb("Client $newsock connected"); $clients[] = $newsock; } $key = array_search($socket, $read); unset($read[$key]); } foreach ($read as $read_socket) { // The actual problem starts here? printb("Read part."); // EDIT $data = socket_read($read_socket, 128); if ($data === false) { printb("Client $read_socket disconnected"); $key = array_search($read_socket, $clients); socket_close($clients[$key]); unset($clients[$key]); continue; } } } 进入无限循环。有办法解决吗?

编辑II: 客户端断开连接后,$num_changed_sockets会给出空字符串。

编辑III: 根据上一次编辑,断开客户端,如果var_dump返回一个空字符串似乎工作。我在PHP的网站上找到了一条说明:

  

注意:当没有更多数据要读取时,socket_read会返回零长度字符串("")。

当客户端断开连接时,这不应该返回socket_read()吗?

0 个答案:

没有答案
相关问题