簡體   English   中英

Node.js / Nginx:在node.js完成處理之前,在Nginx請求超時

[英]Node.js / Nginx : Request timesout at Nginx before processing finishes at node.js

我有一個Nginx/Node.js服務器設置。 基本過程是我從瀏覽器將文件上傳到nginx ,然后將其轉發到node.js Node.js處理該文件,並通過nginx將輸出返回到瀏覽器。

盡管大多數文件都可以正常工作,但是當上傳的文件太大時,它就會崩潰。 收到文件后,我的節點開始處理該文件,但在該節點完成其處理之前,請求在nginx處超時。 該節點繼續運行並成功完成了該過程,但對我來說毫無用處。

我該怎么做才能解決我的問題? 增加Nginx超時(但達到什么限制)? 嘗試加快在節點上的處理速度(我已經在嘗試這樣做,但是我只能在一定程度上做到這一點)? 嘗試使用節點模塊socket.io (我不知道如何,但是我什至不確定它是否會工作)?

提前thnx!

您的節點進程不應該等待處理完成,直到它返回響應。 通過排隊處理后台工作程序中的文件。 您甚至可以更進一步,直接使用Amazon S3之類的文件直接上載,而不用碰堆棧,然后將文件排隊處理。

去耦解決方案。 有不同的實現方法。

編輯:

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

  1. 節點服務器實例使用https://github.com/aws/aws-sdk-js將文件存儲在S3中
  2. 然后,我使用https://github.com/learnboost/kue排隊processing命令(其他流行的選項包括RabbitMQ)
  3. 服務器以成功消息響應。
  4. 現在,在空閑時,第二個進程(工作進程)從S3中獲取文件並進行處理。
  5. 在客戶端上,您可以輪詢當前的處理狀態(如果工作人員能夠計算和存儲進度,甚至可以查看進度條),並告訴用戶完成的時間。 您可以選擇使用socket.io之類的東西來代替輪詢,並允許服務器進程和工作進程將消息推送到客戶端(同樣,可以通過使用redis pub / sub或RabbitMQ之類的方法來分離消息並存儲其中的消息第三個“聊天”過程發送給客戶)。

暫無
暫無

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

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