簡體   English   中英

僅在NodeJs和Express上通過http阻止請求構建網站

[英]Building Websites only on NodeJs and Express blocking requests over http

我對使用Nodejs,Express和Jade作為模板時的示例有疑問。

所有示例都展示了如何構建某種用戶管理界面,您可以在其中添加,刪除和管理用戶配置文件。

這些被認為是NodeJ的初學者指南。 我的問題是,如果我有10個用戶同時訪問相同的界面並執行相同的操作,那么NodeJ肯定會阻止其他用戶在同一端口上運行時對他們的請求。

因此,假設我要提取的用戶列表可能類似於10000。是的,我可以進行分頁,但這不是重點。 當我從服務器獲取列表時,另外4個用戶想要訪問該應用程序。 他們必須等待我的過程結束。 這就是我的問題-如何使用NodeJS&Express避免這種情況?

我在這個問題上待了幾個月! 我目前有一些可以執行以下操作的內容:

  1. 在端口上運行物料的主要處理
  2. 在其他端口上運行Socket.io進程
  3. 使用粘性會話
  4. 我的想法是我執行一個請求(例如獲取項目列表),並立即以一些請求引用進行響應,但沒有被請求的項目,因此釋放了端口。
  5. 然后在后台“異步”執行獲取項目的過程。 完成后,我從一個節點向套接字節點端口節點發出Http請求,以通過這些端口發送項。
  6. 完成后,我然后執行一個socket.io發出數據和初始請求引用,以便正確的用戶獲取消息。
  7. 在客戶端,我有一個事件監聽套接字,然后通過填充列表來完成ajax請求。

我在此方面取得了一些成功! 它實際上在一定程度上有效! 我在線上有個問題,由於IP地址和socket.io玩得很滑稽,這使事情變得更加復雜。

我也有多個使用集群的工人。 我以以下方式使用它:

  1. 我創建一個主工人
  2. 我催生工人
  3. 我接受任何連接請求,並將其傳遞給相關的工作人員。

我對主節點請求和套接字請求都這樣做。 就像我說的我使用2個端口!

如您所見,我為此做了很多工作,而我卻沒有找到合適的解決方案!

我的問題是-我是否曾環游世界10次而錯過了一些簡單的事情? 這聽起來很復雜,以實現一個非阻塞的nodejs only網站。

我問自己-當然,所有這些教程都不會錯過如此重要的事情! 但是他們做到了!

我已經研究,閱讀和測試了很多代碼-這是我第一次對stackoverflow提出任何問題!

感謝您的協助。

PS相同方法的一個示例是:我使用jasper請求報告,傳遞參數,並使用如上所述的“延遲ajax響應”方法,我只是釋放了端口,並且在后台生成了非常密集的報告(這可能是一個非常密集的過程,因為正在執行大量計算)。 我真的沒有更好的方法-任何幫助將不勝感激!

感謝您抽出寶貴的時間閱讀!

我很遺憾地說,但是,是的,您已經走遍了世界十次,而只是錯過了一些簡單的東西。

顯然,您以前對Web服務器的了解/經驗是從阻塞的角度來看的,如果是這種情況,則您的擔憂是正確的。

Node.js是一個專注於使用單個線程執行代碼的框架,這意味着如果它執行任何阻塞操作,其他任何人都將無法完成任何事情。

節點中可以執行某些操作,例如讀/寫磁盤。 但是,大多數節點操作將是異步的。

我相信您對這個詞很熟悉,因此我不會贅述。 異步操作允許節點執行的操作是,盡可能使此單個線程保持空閑狀態。 閑置是指願意從事其他工作。 如果您的代碼是完全異步的,那么即使對於單個線程,處理4個並發用戶(甚至400個)也不應該成為問題。

現在,關於您最初的端口問題:在給定端口上收到請求后,node.js將執行您為該端口編寫的任何代碼,直到它遇到異步操作后,即可用於在同一端口上接收更多請求。

您要查詢的第二個問題是數據庫操作。 在這種情況下,node-js會將查詢發送到數據庫(這完全不需要時間),而數據庫將執行查詢的實際執行。 同時,節點可以自由地做任何想要的事情,直到數據庫完成為止,並讓節點知道要提取的結果。

您可以通過其結構識別異步操作:my_function(...,...,callback)。 在大多數情況下,使用回調函數的函數是異步的。

因此,最重要的是:不要擔心阻塞IO的問題,因為您幾乎不會遇到任何in節點。 如果需要,請使用單個端口(通過創建多個子進程,您甚至可以在同一端口上具有多個節點實例)。

希望這足以說明問題。 如果您還有其他問題,請告訴我:)

暫無
暫無

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

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