[英]Is it possible to use Node-Redis in this fashion or will I stick to websockets?
我一直在考慮一個涉及以下內容的設計:
( {request: String, transid: String, data: Object } )
( { "transid": "1234-Abcd-5678-abcde", "state": Boolean, data: <data> } )
時間線
路由處理程序向 redis 偵聽器發出 Pub 請求:
( {request: "auth", transid: "1234-Abcd-5678-abcde", data: { email: "test@test.com", "password": "pass" } )
另一台服務器上的訂閱偵聽器進行內部憑據驗證
發布回 redis 頻道
( {transid: "1234-Abcd-5678-abcde", state: false, data: { error: "Incorrect" } } )
路由處理程序使用特定於庫的方法回復客戶端,即 request.send(200)
我的問題是我不完全理解如何實現上述時間線中第 4 步的結果; 即在路由處理程序中甚至有可能幾乎等待消息嗎? 我已經非常接近了,但是當我設計可以擴展的東西時,我懷疑這是否是一種實用的處理方式。 (用戶將詳細信息發送到 /endpoint,/endpoint 路由處理程序將 json 消息發布到通道,外部服務器偵聽解析消息並將其發送到 switch 語句,即 [switch(data.request)],該語句調用執行 DB 的函數操作,然后使用類構造函數生成一個對象,該對象通過 redis 通道發送回等待回復的路由處理程序,然后回復給客戶端。)
請問有人對此有什么看法嗎?
pub/sub 背后的概念是解耦和執行異步任務,但您正在強制系統采用同步風格,這使他的所有優點都消失了。
例如:如果您發布消息,則沒有訂閱者收到它……您會怎么做? 重試? - 客戶端超時,錯誤? - 但用戶只想登錄並且數據庫正在運行
此外,當流量增加時,響應會變慢,因為由於 pub/sub 是廣播,您將只有一個訂閱者可以接收所有這些消息,並且您不想處理兩次登錄邏輯! (我假設)
因此,要解決此問題,您應該實現對等邏輯,其中: - 所有訂閱者都收到消息 - 每個訂閱者都彼此認識 - 一個訂閱者說“我會做這項工作” - 一個“主要”訂閱者說沒問題 - 另一個訂閱者丟棄消息 - 主要訂閱者崩潰,您需要選舉以擁有新的主要訂閱者.. - 等等...
但這是消息代理或redis流api所做的,因此您無需自己實現。 我過去做過,但 Redis 5 還不存在。
由於這些原因,我認為您應該以同步方式進行同步工作。 發布/訂閱不適合您的使用示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.