2

登録ユーザー向けにnodejs(0.8.15)、express(> 3.0)フレームワーク、socket.io、mongodbを使用してアプリケーションを作成しています。

1)mongodb(またはその他)を使用せずに、socket.ioのみを使用して簡単なチャットを簡単に作成できることは誰もが知っています。では、この場合、メッセージはどこに保存されますか?セッション中?

2)この2番目の質問は私にとって非常に重要です

私は理解していません:なぜMongoStoreがセッションのためにそこにあるのですか?「connectのセッションミドルウェア/Connect用の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
    }));
});

私が見つけたばかりのコード。Express2.x用のようです

connect-mongo3)とconnect-mongodblibs の違いは何ですか?https://github.com/masylum/connect-mongodb

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

4)Cookieとソケット用にMongoStoreを作成する必要がありますか?

ありがとう!

4

2 に答える 2

6

1)どこにも?サーバーはメッセージを受信して​​ブロードキャストし、それを忘れます。誰が保管について何か言いますか?サーバーは単なるプロキシにすることができます。

2)ユーザーがサイトを離れた後、セッションを破棄する必要がないため。たとえば、お店を考えてみましょう。あなたは店に行き、あなたはあなたのバスケットにいくつかのものを入れ、そしてあなたはブラウザを閉じます。3日後、戻ってもバスケットにアイテムが表示されます。これは、DBに保存されているセッションでのみ実行できます(少なくとも信頼できる方法で)。

それは本当にあなたのニーズに依存します。私の場合、DBベースのセッションを使用することはほとんどありません。私はRedisのようなメモリ内ストレージを使用しています。

3)誰が知っていますか?微妙な違いかもしれませんが、はっきりとはわかりません。

4)いいえ。私が言ったように:それはあなたのニーズに依存します。ユーザーが実際にページを表示しているときにのみセッションをアクティブにする場合は、任意のメモリ内ストレージを使用できます。または、セッションがまったく必要ない場合もあります。その場合は、セッションをまったく使用する必要はありません。

于 2012-11-28T22:43:14.337 に答える
3

1)チャットにデータベースを使用したくない場合は、メッセージを単純なハッシュに保存する必要があります。ただし、ノードアプリケーションを再起動すると、それらは失われることに注意してください。

2)MongoStore(またはRedisStore)を使用すると、本番環境用に設計されていないMemoryStoreを使用する代わりに、ExpressセッションをMongoDB/Redisに保存できます。

(ちなみに、あなたが見つけたコードはExpress 2.x用です)

3)2つは似ています。個人的にはconnect-mongoを使用しています。

4)いいえ。ExpressはセッションCookieを処理し、Socket.IOはソケットを処理します。MongoDBを使用する場合は、Mongoosehttp ://mongoosejs.com/を試してください。

于 2012-11-28T22:46:49.567 に答える