2015-07-10 39 views
1

我有一個Laravel php應用程序和一個NodeJS客戶端。我的客戶端發生了一些情況,我想更新我的php後端,因此我發佈了一條消息到Redis頻道,在我的Laravel應用程序中,我有一個Redis訂閱服務器在該頻道上偵聽消息。從Predis訂閱功能中觸發Laravel事件

理想情況下,我想接收到消息時,觸發一個事件,但我得到這個錯誤

[Predis \響應\ ServerException] ERR只(P)訂購/(P)UNSUBSCRIBE/QUIT允許在這個上下文

我能夠在訂戶內部做我需要的東西,比如更新存儲庫等......但是我無法啓動Laravel事件,這就是在這裏做的事。

+0

馬修李潔明在laracast寫了一個解決方案是:https://laracasts.com/discuss/channels/laravel/unable-to-fire-a-laravel-event-from-within-a-laravel-redis -pubsub-subscriber-only-happens-im-interacting-with-queues?page = 0 – Sangar82

回答

1

你是需要使用pubsub兩個連接。訂戶連接不能發出除subscribe,psubscribe,unsubscribe,punsubscribe(儘管@Antirez將來暗示用戶安全ping)以外的任何命令。如果您嘗試別的做任何事情,Redis的告訴你:

-ERR only (P)SUBSCRIBE/(P)UNSUBSCRIBE/QUIT allowed in this context (請注意,你不能用Redis的-CLI對此進行測試,因爲這理解協議不夠好,以防止你發出命令,一旦你有訂閱 - 但任何其他基本套接字工具應該能正常運行)

這是因爲用戶連接工作非常不同 - 而不是請求/響應的基礎工作,收到的郵件可以在任何時間,現在進來了,不請自來的。

publish是一個常規的請求/響應命令,所以必須在普通連接上發送,而不是在用戶連接上發送。 For more information click here

+0

我的節點應用程序是發佈者。我的Laravel應用程序是用戶。 Laravel訂閱了該頻道,節點已發佈到。這就是pub/sub模型的工作原理,對嗎? –

+0

當用戶收到消息時,我需要發起Laravel事件。 –

+0

yes exactly.when sub rec。一個消息,你必須告知laravel意味着在event.php中觸發一個Laravel事件,並且在句柄類中處理 –