2012-11-28 69 views
2

我創建應用程序,使用nodejs(0.8.15),表達(> 3.0)框架,socket.io和mongodb註冊用戶。nodejs:會話存儲在哪裏?什麼是連接mongo?

1)每個人都知道使用socket.io創建簡單的聊天很簡單,沒有mongodb(或其他)。那麼,在這種情況下存儲消息?在會議?

2)第二個問題是非常重要

我不明白:爲什麼MongoStore那裏的會議?我讀到它是「連接會話中間件/連接SessionStorage」。據我所知會話會在用戶離開網站時破壞。那麼爲什麼人們存儲它並使用require('connect-mongo') ??

var config = require('../config'), 
    express = require('express'), 
    MongoStore = require('connect-mongo'), 
    server = express.createServer(); 

server.configure(function() { 
    server.use(express.logger()); 
    server.use(express.methodOverride()); 
    server.use(express.static(config.staticPath)); 
    server.use(express.bodyParser()); 
    server.use(express.cookieParser()); 
    server.use(express.session({ 
     store: new MongoStore({ 
      db: config.db 
     }), 
     secret: config.salt 
    })); 
}); 

我剛剛找到的代碼。它似乎是快遞2.x

3)connect-mongoconnect-mongodb libs有什麼區別? https://github.com/masylum/connect-mongodb

https://github.com/kcbanner/connect-mongo

4)做我必須做MongoStore餅乾和插座?

謝謝!

回答

6

1)無處?服務器收到消息,廣播並忘記它。誰是存儲的東西?服務器可以只是一個代理。

2)因爲會話不必在用戶離開網站後被銷燬。例如考慮一家商店。你去一家商店,你把一些東西放在你的籃子裏,然後關閉瀏覽器。 3天后,你回去,你仍然看到你的物品在籃子裏。這隻能通過存儲在DB中的會話來完成(至少以可靠的方式)。

這真的取決於您的需求。在我的情況下,我很少使用基於DB的會話。我使用內存中的存儲庫,如Redis

3)誰知道?可能會有一些細微的差異,我看不出任何明顯的差異。

4)不,如我所說:這取決於您的需求。如果您希望會話僅在用戶實際查看頁面時處於活動狀態,則可以使用任何內存中的存儲。或者你可能根本不需要會話,在這種情況下,你根本不需要使用會話。

+0

使用2,會話cookie通常會在用戶關閉瀏覽器時被銷燬。還有其他有效的原因。 A.當會話數量變大時默認內存存儲空間不足,B.獨立於應用程序的會話存儲空間便於多應用服務器部署。 – numbers1311407

+0

謝謝你的回答。對於2):如何知道會話何時會被銷燬?多少小時/天?但WHERE存儲此會話?在我的nodejs服務器?或在用戶瀏覽器?順便說一句,我認爲一個籃子的例子可以用簡單的cookies來實現,就這些。 – sirjay

+0

@ numbers1311407我同意,當用戶關閉瀏覽器時,它們通常會被銷燬。至於性能:當活動很大時,那麼一臺數據庫服務器顯然不是高性能的。無論如何你必須擴展。至於與應用程序無關的會話存儲,那麼數據庫是獨立於應用程序的,不是嗎? – freakish

3

1)如果你不想爲你的聊天使用數據庫,你應該把這些消息存儲到一個簡單的哈希中。但請記住,如果您重新啓動節點應用程序,它們將會丟失。

2)MongoStore(或RedisStore)允許您將Express會話存儲到MongoDB/Redis中,而不是使用不是爲生產環境設計的MemoryStore。

(順便說一下,你已經找到了代碼是快速2.X)

3)兩個長相相似。我個人使用connect-mongo。

4)No. Express爲您處理會話cookie,Socket.IO爲套接字。如果你想使用MongoDB,你應該嘗試使用Mongoose http://mongoosejs.com/

+0

謝謝你的回答。對於2):你寫了「..代替使用MemoryStore」。什麼是MemoryStore?它是我的nodejs應用程序的記憶嗎?或我的瀏覽器緩存? – sirjay

+0

不客氣。 MemoryStore僅供開發使用,與Express捆綁使用。你不需要有一個數據庫來使用它。 – Maks

+0

如果您使用connect-mongo或connect-redis,您的會話將存儲在數據庫(如Redis或MongoDB)中。所以你需要在你的服務器上建立一個數據庫;)使用connect-mongodb你可以傳遞一個reapInterval。使用Express也可以將maxAge屬性傳遞給express.session() – Maks

相關問題