PHP сокеты, сообщают, когда соединение оборвалось из-за отключения сервера - PullRequest
0 голосов
/ 20 января 2012

В настоящее время я использую неблокирующий сокет для подключения к сервису в php. У меня проблемы с сообщением, когда соединение обрывается из-за сбоя на стороне сервера ... Все, что я получаю, это ошибки 10035,нефатальная ошибка, которую я игнорирую, но я никогда не получаю соответствующую ошибку и поэтому не могу сказать, когда соединение оборвалось из-за закрытия сервера ... какие-либо предложения по этому вопросу?

Мое прослушиваниерутина выглядит так

$this->shouldListen = true;
$fullResponse = '';

while ($this->shouldListen) {

  //read some data
  $tempResponse=socket_read($this->sock,1000);
  if ($this->shouldBeRunning() == false) {
    break;
  }

  if ($tempResponse == FALSE) {
    //ignore ignorable error 
    $error = socket_last_error($this->sock);
    if ($error!=11 && $error!=115 && $error!=10035) {
      $this->writeLogFile("got an error ".$error);
      break;
    }
  } else {
    //do something with the response
  }

}

и создаёт сокетное соединение вот так

function connect() {

  /* Turn on implicit output flushing so we see what we're getting
   * as it comes in. */
  ob_implicit_flush();

  if (($this->sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    return false;
    // echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
  } else {
    //echo 'success1<br />';
  }

  if (socket_bind($this->sock, '0.0.0.0') === false) {
    return false;
    //echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
  } else {
    //echo 'success2<br />';
  }

  if (socket_connect($this->sock, $this->ip, $this->port) === false) {
    //echo "socket_connect() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
    return false;
  } else {
    //echo 'success3<br />';
  }

  socket_set_nonblock($this->sock);
  return true;
}

Спасибо

Даниэль

1 Ответ

1 голос
/ 20 января 2012

Мы работаем с несколькими удаленными службами, где нам необходимо включить методы ping, чтобы проверить, имеет ли служба, к которой мы подключены, активное соединение. Я бы порекомендовал реализовать эту концепцию ping в вашем скрипте.

Кто-то опубликовал метод ping с помощью библиотеки socket_ * на странице PHP socket_create .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...