-
-
Notifications
You must be signed in to change notification settings - Fork 17
Open
Labels
Description
Periodically, 5-10 times per hour, my script crashes into a fatal error. Here is the log:
- Connection closed abnormally while awaiting message; Code 1006 (ABNORMAL_CLOSE); Reason: "TCP connection closed unexpectedly"
- Connection closed abnormally while awaiting message; Code 1008 (POLICY_VIOLATION); Reason: "Exceeded unanswered PING limit"
How can I rewrite the code so that the script does not fall into a fatal error, but just let's say it sleeps for 30 seconds? or maybe there is another way so that this error does not occur and the script runs forever. I'll attach the code, can you help write the correct workaround for this error?
I will be very grateful!
MyCode:
<?php
//require_once ...
use Amp\ByteStream\StreamException;
use Amp\Loop;
use Amp\Websocket;
use Amp\Websocket\Client;
use Amp\Websocket\Client\Connection;
use Amp\Websocket\Client\Handshake;
use Amp\Websocket\ClosedException;
use Amp\Websocket\Message;
use Amp\Websocket\Options;
use Amp\Delayed;
use function Amp\Websocket\Client\connect;
Amp\Loop::run(function () {
$handshake = (new Handshake('wss://mg-s1.site.ru/api/bot/v1/ws?events=message_new'))->withHeader('x-bot-token', '0000000000000000000000000000000000000000000000000');
$connection = yield connect($handshake);
yield $connection->send('Hello!');
try {
while ($message = yield $connection->receive()) {
$payload = yield $message->buffer();
$result = json_decode($payload, true);
//handler code
}
} catch (ClosedException $e) {
logFileEvent ('Connection break. sleep 30 sec');
logFile ('Errors: ' . $e->getMessage());
sleep(30);
} catch (AssertionError $e) {
logFile ('Errors: ' . $e->getMessage());
$connection->close();
} catch (Error $e) {
logFile ('Errors: ' . $e->getMessage());
$connection->close();
} catch (StreamException $e) {
logFile ('StreamException: ' . $e->getMessage());
$connection->close();
}
});
?>