2015-10-07 30 views
-2

我試圖在NodeJS中創建一個隊列系統,以便只有20個連接能夠一次訪問某個頁面。現在我使用shortid和javascript localStorage(存儲他們的ID)爲每個用戶分配一個唯一的ID。我想給每個用戶1分鐘的時間看內容,然後引導他們「重新排隊」。如果他們必須等待,它會告訴他們「你將在XX分鐘內連接」。用於連接的NodeJS隊列系統過去20

現在我的過程是使用http.globalAgent.maxSockets = 20;只允許20人進入,但它不允許我將它們路由到其他地方讓他們等待。我的想法是建立一個數據庫,以確定人們「排隊」的順序。然後,當用戶在1分鐘後被踢出頁面時,下一個「在線」用戶將被帶入並給出1分鐘,然後被踢出。

我正在使用MySQL來存儲隊列。問題是我不知道如何完成代碼以在一分鐘後啓動某個人,並讓他們「重新聯機」。任何幫助?謝謝!

+0

目前尚不清楚你想要控制的是什麼。您是否想要控制有多少人可以同時查看網頁?因爲查看與'http.globalAgent.maxSockets'沒有任何關係,並且不是你的服務器可以直接控制的東西。查看常規網頁的瀏覽器在查看時未連接到服務器。建立一個或多個連接以檢索頁面內容,然後在檢索到頁面內容後關閉連接。這在不同版本的HTTP中稍有不同。 – jfriend00

+0

你爲什麼要使用localStorage?一個cookie就足夠了,並且具有更好的瀏覽器兼容性。 – tsturzl

回答

0

我認爲你誤解了HTTP協議。當您發出HTTP請求時,會創建一個TCP連接,但不會被保留。你也不能僅限於一個路徑的套接字。 HTTP不是一個持久連接。你需要找到另一種實現這種系統的方式。由於HTTP是無狀態和非持久性的,因此很難做到正確。因此,如果您將maxSockets限制爲20,那意味着您一次只能接受20個請求。爲請求/響應創建一個套接字,但即使用戶仍在查看頁面,該套接字也不會保留。

您可能需要一種方法將用戶「簽入」該頁面。想到的一點是讓用戶在到達該頁面時連接到Web套接字,並且每次用戶嘗試加入時都會向該頁面上的所有用戶發送廣播,以查看該頁面上還有多少用戶。這仍然會很容易被愚弄,除非你通過websocket提供頁面內容,因爲我可以簡單地禁用websockets或加載腳本以從websocket斷開連接,所以它不能「讓我重新排隊」。這很可能是一個非常複雜的解決方案,因爲你試圖管理你的客戶的狀態,而這不是HTTP擅長的。