PHP: Stomp – Возможно ли уловить ошибки на «send ()»?

Я использую клиент PHP Stomp для отправки сообщения stomp.

Я хотел бы оставить постоянное соединение открытым, на заднем плане, и отправлять сообщения время от времени.

Однако я не могу найти способ справиться с ошибками соединения, если они произойдут после открытия соединения (при отправке ()).

Например, при запуске:

<?php $stomp = new Stomp('tcp://localhost:61613'); sleep(5); // Connection goes down in the meantime $result = $stomp->send('/topic/test', 'TEST'); print "send " . ($result ? "successful\n": "failed\n"); ?> 

Выход: send successful

Даже если соединение отключается во время sleep() , send() всегда возвращает true.

Документы не очень помогли, Stomp::error() и stomp_connect_error() также не помогают, поскольку они возвращают false .

Как временное решение, я снова подключаюсь к каждой send() .

Есть ли лучший способ уловить ошибки соединения?

Нашел ответ в спецификации самого протокола stomp:

Любой клиентский кадр, отличный от CONNECT MAY, указывает заголовок квитанции с произвольным значением. Это приведет к тому, что сервер подтвердит получение кадра с кадром RECEIPT, который содержит значение этого заголовка в качестве значения заголовка идентификатора приема в кадре RECEIPT.

Поэтому настройка заголовка «получение» делает запрос синхронным, поэтому соединение с сервером должно быть живым.

Итак, код:

 $result = $stomp->send('/topic/test', 'TEST'); print "send " . ($result ? "successful\n": "failed\n"); $result = $stomp->send('/topic/test', 'TEST', array('receipt' => 'message-123')); print "send " . ($result ? "successful\n": "failed\n"); 

Дает выход:

 send successful send failed 

Это не похоже на лучшее решение для этого случая, но оно работает для меня.

Если кто-то знает лучший способ, я буду рад услышать это.


Обновить:

В конце концов я переключился на Stomp-PHP (чистый PHP-клиент) вместо клиента Pecl stomp, который обрабатывает его намного лучше .