php套接字服务器检查客户端是否已连接

php套接字服务器检查客户端是否已连接,php,sockets,Php,Sockets,此套接字服务器工作正常,但不知道如果未关闭连接,如何检查客户端是否仍处于连接状态 如果没有,任何机构是否可以帮助检查客户端是否仍处于连接状态?如何关闭该连接 谢谢 <?php // PHP SOCKET SERVER // Configuration variables $host = "127.0.0.1"; $port = 3000; $max = 5000; $client = array(); // No timeouts, flush content

此套接字服务器工作正常,但不知道如果未关闭连接,如何检查客户端是否仍处于连接状态 如果没有,任何机构是否可以帮助检查客户端是否仍处于连接状态?如何关闭该连接

谢谢

<?php
  // PHP SOCKET SERVER

 // Configuration variables
  $host = "127.0.0.1";
  $port = 3000;
  $max = 5000;
  $client = array();

  // No timeouts, flush content immediatly
  @set_time_limit(0);
  ob_implicit_flush();

  // Server functions
    // Create socket
  $sock = @socket_create(AF_INET, SOCK_STREAM, 0) or die("[" . date('Y-m-d H:i:s') . "] Could not create socket\n");
  // Bind to socket
  socket_bind($sock, $host, $port) or die("[" . date('Y-m-d H:i:s') . "] Could not bind to socket\n");
  // Start listening
  socket_listen($sock) or die("[" . date('Y-m-d H:i:s') . "] Could not set up socket listener\n");

  rLog("Server started at " . $host . ":" . $port);
  // Server loop
  while (true) {
      socket_set_block($sock);
      // Setup clients listen socket for reading
      $read[0] = $sock;
      for ($i = 0; $i < $max; $i++) {
          if (@$client[$i]['sock'] != null)
              $read[$i + 1] = $client[$i]['sock'];
      }
      // Set up a blocking call to socket_select()
      $ready = socket_select($read, $write = null, $except = null, $tv_sec = null);
      // If a new connection is being made add it to the clients array
      if (in_array($sock, $read)) {
          for ($i = 0; $i < $max; $i++) {
              if (@$client[$i]['sock'] == null) {
                  if (($client[$i]['sock'] = socket_accept($sock)) < 0) {
                      rLog("socket_accept() failed: " . socket_strerror($client[$i]['sock']));
                  } else {

                      rLog("Client #" . $i . " connected");
                  }
                  break;
              } elseif ($i == $max - 1) {
                  rLog("Too many clients");
              }
          }
          if (--$ready <= 0)
              continue;
      }
      for ($i = 0; $i < $max; $i++) {
          if (in_array(@$client[$i]['sock'], $read)) {
              $input = socket_read($client[$i]['sock'], 1024);
              $n = trim($input);
              if ($input) {
                  // Strip whitespaces and write back to user
                  // Respond to commands
                  /*$output = ereg_replace("[ \t\n\r]","",$input).chr(0);
                   socket_write($client[$i]['sock'],$output);*/

                   $processRe = processRequest($input);
                    sendMessage($client[$i]['sock'],$processRe);

              }
          } else {

              //if($client[$i]['sock']!=null){
              // Close the socket
              //socket_close($client[$i]['sock']);
              //unset($client[$i]);
              //rLog("Disconnected(1) client #".$i);
              //}
          }
      }
  }
 socket_close($sock);
?>

当客户端关闭连接时,将返回
socket\u select
函数,并且当调用
socket\u read
时,客户端指定的套接字句柄将可用于
socket\u read
客户端关闭连接

但当客户端连接时,您可以通过在其客户端套接字句柄上调整
socket\u close
函数来关闭连接