2015-07-10 1 views
1

У меня есть приложение Laravel php и клиент NodeJS. Что-то происходит в моем клиенте, и я хочу обновить свой php-сервер, поэтому я публикую сообщение на канал Redis, а в своем приложении Laravel у меня есть подписчик Redis, который прослушивает сообщения на этом канале.Увольнение события Laravel из функции подписки Predis

В идеале, я хочу, чтобы огонь событие, когда получено сообщение, но я получаю эту ошибку

[Predis \ Response \ ServerException] ERR только (P) ПОДПИСАТЬСЯ/(P) UNSUBSCRIBE/QUIT разрешено в этом context

Я могу делать то, что мне нужно от подписчика, например, обновлять репозиторий и т. д. ... но я не могу запустить событие Laravel, что имеет смысл делать здесь.

+0

Мэтью Лилли написал решение для этого на laracast: https://laracasts.com/discuss/channels/laravel/unable-to-fire-a-laravel-event-from-within-a-laravel-redis -pubsub-subscriber-only-happen-when-im-interacting-with-queues? page = 0 – Sangar82

ответ

1

Чтобы использовать только 2 соединения для pub и sub. Абонентское соединение не может выдавать любые команды, кроме subscribe, psubscribe, unsubscribe, punsubscribe (хотя @Antirez намекнул на безопасный пинг в будущем). Если вы пытаетесь сделать что-нибудь еще, Redis говорит вам:

-ERR only (P)SUBSCRIBE/(P)UNSUBSCRIBE/QUIT allowed in this context (обратите внимание, что вы не можете проверить это с помощью Redis-кли, так как понимает протокол достаточно хорошо, чтобы помешать вам выдавать команды, как только вы подписался - но и любой другой основной инструмент розетка должна работать нормально)

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

Публикация представляет собой обычную команду запроса/ответа, поэтому ее необходимо отправить по регулярному соединению, а не по подписке. For more information click here

+0

Приложение «Мой узел» является издателем. Приложение Laravel является подписчиком. Laravel подписался на канал, узел опубликовал. Так работает паб/подмодуль, правильно? –

+0

Когда абонент получает сообщение, мне нужно запустить событие Laravel. –

+0

да точно. После того sub rec. сообщение, которое вам нужно сообщить, сообщает laravel, что означает событие Laravel в event.php, а также обрабатывать класс handle –