PHP Ratchet веб-сокет отправить сообщение рабочий процесс - PullRequest
0 голосов
/ 01 февраля 2019

Я разрабатываю чат-сервер с помощью библиотеки PHP Ratchet, и у меня есть сомнения по поводу отправки сообщения:

У меня есть два метода: onOpen(ConnectionInterface $conn) и onError(ConnectionInterface $conn, \Exception $e).

Когдаклиент подключается к чату, вызывается метод onOpen, и я хотел бы отправить ответное сообщение, поэтому я делаю $conn->send($data).

, если есть ошибка, вызывается onError, но если ее нетerror Как узнать, все ли прошло успешно, так как поток все равно продолжается?(У меня нет метода успеха).

Я задаю вам следующий вопрос, потому что мне приходится справляться со следующей ситуацией: когда я отправляю сообщение клиенту, если метод "send" идет не так, у менясохранить в базе данных сообщение, которое я не смог отправить, и попытаться отложить его позже, а если отправка прошла успешно, мне не нужно ничего сохранять.Моя проблема заключается в том, что если метод "send" идет не так, вызывается метод "onError", и у меня есть только экземпляр о "ConnectionInterface", но нет сообщения, которое я не смог отправить, поэтому в таком случае, как я мог?сделать, чтобы восстановить его?

Надеюсь, я ясно объяснил проблему

1 Ответ

0 голосов
/ 05 марта 2019

Может быть, что-то вроде этого ...

@ пример:

// ...

/**
 * {@inheritDoc}
 */
public function onOpen(ConnectionInterface $connection)
{
    // ...

    $package = [
        'data'  => $data = [] // for example
    ];

    $json = json_encode($package, JSON_FORCE_OBJECT);

    $connection->currentMessage = $json;
    $connection->send($json);

    // $connection->send(null); // uncomment if you wanna simulate error (call onError())
}

// ...

/**
 * {@inheritDoc}
 */
public function onError(ConnectionInterface $connection, \Exception $e)
{
    $connection->currentMessage; <-- your current message

    // ... save message, etc, ...whatever you want :)

    $connection->close();
}

Веселись!

...