2014-02-27 63 views
0

我有一個Nginx/Node.js服務器設置。基本過程是,我從一個瀏覽器上傳一個文件到nginx,該瀏覽器將其轉發到node.jsNode.js處理該文件並通過nginx將輸出返回給瀏覽器。的Node.js/Nginx的:在Nginx的請求timesout處理之前完成在Node.js的

儘管它對大多數文件都正常工作,但當上傳的文件太大時,它會崩潰。在收到文件後,我的節點開始處理文件,但在節點完成其處理之前,請求在nginx處超時。節點繼續運行併成功完成該過程,但對我來說沒有用處。

我能做些什麼來解決我的問題?增加nginx超時(但是到什麼限制)?嘗試加快我在節點上的過程(我已經嘗試過,但我只能做到這一點)?嘗試使用節點模塊socket.io(我不知道如何,但我什至不知道它是否會工作)?

Thnx提前!

回答

1

您的節點進程不應該等待處理完成,直到它返回響應。通過排隊處理後臺工作人員中的文件。您甚至可以更進一步,直接上傳到Amazon S3之類的東西,而無需觸摸堆棧,然後將文件排隊處理。

解耦是溶液。實現它的方式有很多種。

編輯:

下面是我處理文件上傳的具體示例。

  1. 節點服務器實例存儲在S3使用https://github.com/aws/aws-sdk-js
  2. 我然後排隊使用https://github.com/learnboost/kue一個processing命令(其他流行的選擇包括的RabbitMQ)文件
  3. 服務器用成功消息進行響應。
  4. 現在,一旦它閒置,第二個進程(工作者)從S3中獲取文件並對其進行處理。
  5. 在客戶端上,您可以輪詢當前的處理狀態(甚至是進度條,如果您的工作人員能夠計算並存儲進度)並告訴用戶何時完成。你可以選擇使用類似於socket.io而不是輪詢的東西,並允許服務器進程和工作進程將消息推送到客戶端(同樣,這可以通過使用諸如redis pub/sub或RabbitMQ之類的東西來解耦,並將消息第三個「聊天」過程發送給客戶)。
+0

你能否舉一個解耦的例子,你認爲我可以用在這裏在我的情況?我節點的輸出是一個我在瀏覽器中顯示的html頁面。 –

+0

查看更新的答案 – Prinzhorn

相關問題