我的專案是一個完整的堆疊應用程式,其中一個 Web 客戶端訂閱一個未就緒的物件。當訂閱被觸發時,后端將對該未準備好的物件運行一個觀察回圈,直到它準備好。當這種情況發生時,它會通過 socketIO 向前端發送一條訊息(歡迎提出建議,我不太確定這是否是最好的方法)。我的問題是如何構建觀察回圈。
我的前端基本上訂閱了后端,并獲得回傳 200,如果訂閱正確,將連接到每個 Websocket (socketIO) 的服務器,或者如果出現錯誤,則連接到錯誤 4XX 代碼。在后端,當用戶訂閱時,它應該為該用戶啟動,一個“執行緒”(我知道 Nodejs 不支持執行緒,這只是為了心理形象)每 10 秒左右從 api 輪詢一次資訊。
我這樣做是因為我輪詢的 API 不支持 WebHook,所以我需要觀察 API 回應,直到它處于我想要的狀態(這部分我已經清除了)。
我要問的是,是否有第三方庫實際上適用于這些型別的任務?我應該使用作業執行緒還是類抽象的簡單 setTimeouts?回應將通過 SocketIO 發送,這部分我也已經開始作業了,這只是我正在使用的方法,我不太確定如何構建。
我也愿意使用另一種合適的編程語言來更容易地解決這個問題。我不著急。
uj5u.com熱心網友回復:
輪詢網路請求(聽起來像這樣)是非阻塞和異步的,因此除非您對結果進行一些重量級計算,否則它不會真正占用您的 nodejs CPU。
因此,單個 nodejs 執行緒可以發出大量網路請求(用于輪詢和通過 socket.io 連接發送資料),而無需添加 WorkerThreads 或集群。這是 nodejs 非常非常擅長的事情。
我不知道有任何專門用于此的第三方庫,因為無論如何您都必須自定義代碼查看網路請求的結果,這就是大部分編碼。要做出HTTP從列出的其他的NodeJS服務器請求一堆庫的位置。該串列中我最喜歡的是got(),但您可以查看選擇并決定您喜歡什么。
至于重復請求,我可能只會使用重復setTimeout()呼叫或setInterval()呼叫。
您沒有說您是否必須為訂閱某些內容的每個客戶端發出單獨的請求,或者您是否可以以某種方式組合所有觀看相同資源的客戶端,以便對所有客戶端使用相同的輪詢間隔。如果你能做到后者,那肯定會更有效率。
如果在擴展時遇到擴展問題,則可以將輪詢代碼移動到一個或多個子行程或 WorkerThreads,然后在發現需要發送的新狀態時通過訊息傳遞回主執行緒給客戶。但是,我不認為您需要撰寫額外的步驟,直到您達到更大的規模。與大多數可擴展的東西一樣,您需要撰寫更基本的選項(它本身應該可以很好地擴展),然后進行測量和基準測驗,看看任何瓶頸在哪里,并根據資料而不是推測來修改架構。很多時候,架構被過度設計和過度實施,這是基于人們認為瓶頸可能在哪里而不是他們實際在哪里。這不僅使開發需要更長的時間,最終實作比所需更復雜的實作,而且它可以針對問題的錯誤部分進行開發。分析、測量,然后決定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/379649.html
