Сброс соединения через равноправный сокет php

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

Сброс соединения по пиру

Я использую эту библиотеку сокетов https://github.com/navarr/Sockets и для запуска файла в качестве демона я использую навсегда

Через некоторое время я получаю эту ошибку

<br />
<b>Fatal error</b>:  Uncaught exception 'Navarr\Socket\Exception\SocketException' with message 'Connection reset by peer' in /var/www/html/tracker2/src/Socket.php:685
Stack trace:
#0 /var/www/html/tracker2/src/Socket.php(532): Navarr\Socket\Socket::exceptionOnFalse(Resource id #10117, Object(Closure))
#1 /var/www/html/tracker2/src/Server.php(236): Navarr\Socket\Socket-&gt;read(1024, 2)
#2 /var/www/html/tracker2/src/Server.php(202): Navarr\Socket\Server-&gt;read(Object(Navarr\Socket\Socket))
#3 /var/www/html/tracker2/src/Server.php(158): Navarr\Socket\Server-&gt;loopOnce()
#4 /var/www/html/tracker2/socket.php(33): Navarr\Socket\Server-&gt;run()
#5 /var/www/html/tracker2/socket.php(96): EchoServer-&gt;__construct('172.xx.xx.xxx')
#6 {main}
thrown in <b>/var/www/html/tracker2/src/Socket.php</b> on line <b>685</b><br />
error: Forever detected script exited with code: 255
error: Script restart attempt #1
<br />
<b>Fatal error</b>:  Uncaught exception 'Navarr\Socket\Exception\SocketException' with message 'Address already in use' in /var/www/html/tracker2/src/Socket.php:685
Stack trace:
#0 /var/www/html/tracker2/src/Socket.php(138): Navarr\Socket\Socket::exceptionOnFalse(Resource id #28, Object(Closure))
#1 /var/www/html/tracker2/src/Server.php(136): Navarr\Socket\Socket-&gt;bind('172.xx.xx.xxx', 8153)
#2 /var/www/html/tracker2/socket.php(20): Navarr\Socket\Server-&gt;__construct('172.xx.xx.xxx', 8153)
#3 /var/www/html/tracker2/socket.php(96): EchoServer-&gt;__construct('172.xx.xx.xxx')
#4 {main}
thrown in <b>/var/www/html/tracker2/src/Socket.php</b> on line <b>685</b><br />
error: Forever detected script exited with code: 255

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

Если нет решения исправить сброс соединения по пиру то есть ли вероятность, что я смогу запустить скрипт снова через 5 минут после получения ошибки Сброс соединения по пиру.

почему 5 минут, потому что сокет переходит в стадию ожидания, а когда вы постоянно пытаетесь запустить скрипт снова, он говорит, что адрес уже используется

Код:

<?php

use Navarr\Socket\Socket;
use Navarr\Socket\Server;

class EchoServer extends Server
{
const DEFAULT_PORT = 7;

public function __construct($ip = null, $port = self::DEFAULT_PORT)
{
parent::__construct($ip, $port);
$this->addHook(Server::HOOK_CONNECT, array($this, 'onConnect'));
$this->addHook(Server::HOOK_INPUT, array($this, 'onInput'));
$this->addHook(Server::HOOK_DISCONNECT, array($this, 'onDisconnect'));
$this->run();
}

public function onConnect(Server $server, Socket $client, $message)
{
echo 'Connection Established',"\n";
}

public function onInput(Server $server, Socket $client, $message)
{
echo 'Received "',$message,'"',"\n";
$client->write($message, strlen($message));
}

public function onDisconnect(Server $server, Socket $client, $message)
{
echo 'Disconnection',"\n";
}
}

Так как ошибка идет в строке нет 685 ниже та функция, которая написана в Socket.php файл

protected static function exceptionOnFalse($resource, callable $closure)
{
$result = $closure($resource);

if ($result === false) {
throw new SocketException($resource);
}

return $result;
}

-1

Решение

Ошибка connection reset by peer произошло, потому что ваш сервер может пытаться
при записи или чтении сообщения из сокета, который был закрыт узлом, фактически на основе трассировки стека исключений, произошла ошибка, когда сервер прочитал данные. Вы должны убедиться, что библиотека сокетов использует сообщения ping и pong для реализации, если клиент отправляет ping-сообщение, он ожидает получить сообщение pong или закрыть соединение.

Если это не решило вашу проблему, попробуйте перехватить исключение, выйдите из сценария php и запустите его снова. Существует так много возможностей, которые могут вызвать ошибку.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]