簡體   English   中英

在 Node.js 中處理來自 Swift 客戶端的長時間運行請求

[英]Handle long-running request from Swift Client in Node.js

所以我目前正在使用 socket.io 作為加載屏幕,但它無法正常工作,所以我將嘗試不同的解決方案。 我需要發生以下情況:用戶打開我的應用程序——這會在服務器端觸發 function(CPU 密集型抓取 function 大約需要 8 秒)。 一旦 function 完成,我需要通知客戶端 function 完成並且客戶端獲取結果(獲取此結果后,應用加載屏幕關閉並且用戶進入應用)。

我當前的實現是使用 socket.io 排放並在后台線程上通過 Redis 隊列處理抓取 function。

是否有不同的方法來執行此操作,而不是使用套接字連接並從客戶端-> 服務器發送發射,反之亦然?

我認為我不能只處理經典的 GET 請求,因為在等待響應的同時讓長時間運行(8 秒)的請求打開這么長時間不是不好的做法嗎? 另外,我查看了服務器發送的事件,但我不確定在這種情況下是否能夠使用它。

非常感謝任何見解!

來自“健康”服務器的響應比正常時間長 8 秒,但應該沒問題。 我只是使用來自移動客戶端的 GET,並將其寫入以在等待時不阻塞 UI。

編寫您的 UI,以便通知用戶它正在等待響應,甚至可能讓用戶了解響應可能需要多長時間。

有幾點要記住。

  1. nodejs 通常可以做很多並發的網頁抓取:大部分網頁抓取經過的時間都花在等待被抓取的服務器響應上。 nodejs 是異步的。 所以工作線程可能沒有多大幫助。 它們肯定會使您的服務器應用程序更加復雜。 擴展它的一個不錯的選擇可能是集群你的 nodejs 應用程序。
  2. 編寫您的服務器以將 GET 請求的響應延遲幾秒鍾並沒有什么害處,除了對用戶體驗的損害 如果您的用戶在那幾秒鍾內有一些合理的東西可以查看,那么您可能會僥幸逃脫。
  3. 如果您的用戶在該停頓期間正在查看 web 頁面,您可以使用xhr或從頁面中的 Javascript 代碼獲取該數據,同時使用微調器或一些此類用戶界面的東西來娛樂他們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM