amphp / websocket-client

Async WebSocket client for PHP based on Amp.
https://amphp.org/websocket-client
MIT License
148 stars 18 forks source link

Question, on breaks. Errors #1006, 1008 #41

Open Konstantin-seo opened 2 years ago

Konstantin-seo commented 2 years ago

Periodically, 5-10 times per hour, my script crashes into a fatal error. Here is the log:

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();
        }
});

?>
Konstantin-seo commented 2 years ago

@kelunik Can you explain why these 2 errors occur and where should I dig to avoid them?

For example, error 1006 occurs for me more than 100 times a day. For some reason, I immediately raise a new connection, but I want to understand the reason for their appearance. Is it my server? library settings?

What options need to be changed heartbeat?

kelunik commented 4 months ago

Hi @Konstantin-seo, sorry that I forgot to answer this long. Is this still something you're interested in?

Konstantin-seo commented 4 months ago

Hi @Konstantin-seo, sorry that I forgot to answer this long. Is this still something you're interested in?

It would be great. Now, as a solution, I catch the break, and again, via goto, start listening on the socket

kelunik commented 4 months ago

Is the server also something you control and have access to? Is that server also AMPHP based?

Konstantin-seo commented 4 months ago

Is the server also something you control and have access to? Is that server also AMPHP based?

No