8

socket.io によって相互に接続されている 2 つの nodejs サーバー (web サーバー、socket サーバー) があります。Web サービスでは、express.js と Passport.js を認証ミドルウェアとして使用します。

これは私のWebサーバー構成です:

var express = require('express'),
    mongo = require('mongodb'),
    io = require('socket.io'),
    passport = require('passport'),
    LocalStrategy = require('passport-local').Strategy,
    MongoStore = require('connect-mongo')(express);

app.configure(function () {
    app.use(express.cookieParser());
    app.use(express.methodOverride());
    app.use(express.bodyParser());
    app.use(express.session({
        secret: 'keyboard cat',
        store: new MongoStore({
          db: 'MyDatabase'
        })
    }));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(app.router);
    app.use(express.static(__dirname + '/htdocs'));
});

connect-mongo を使用すると、http 要求ごとに新しいセッションが作成されます。

この要素は、ログイン リクエストで作成します。

{
  "_id" : "UCnXade6Bk6ofOZ+jiEgzyH8",
  "session" : "{\"cookie\":{\"originalMaxAge\":31536000000,\"expires\":\"2014-03-07T13:07:45.703Z\",\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"50cae08806e31ea2e5634e3f\"}}",
  "expires" : new Date("7.3.2014 19:07:45")
}

そして、この要素は、F5 を押すか、ソケットを取得するたびに作成されます。

{
  "_id" : "JhypbYFtj1CGOK/ylMhG8+Yk",
  "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}",
  "expires" : new Date("21.3.2013 19:03:38")
}

Web サーバーがソケット接続を取得すると、connect-mongo が新しいセッションを作成します。毎分約 50 の新しいドキュメントがあります。

その理由は何ですか?

アップデート

ページを更新する場合、ヒントを追加するのに役立ちましたapp.use(express.favicon())

ソケットの質問はまだ現実的です。

私のソケットサーバーコード

function sendPortalJSON (portal_id, data, _event) {
    https.get({
        host : ....,
        port : ....,
        path : "/" + _event + "?data=" + encodeURIComponent( JSON.stringify (data))
    }).on('error', function (err) {

    });
}
...
sendPortalJSON(1, agent_data[i].d, "cpu-details");

そしてウェブサーバー上:

app.get('/cpu-details', function (req, res) { });
4

1 に答える 1

2

まず、静的ミドルウェアをセッション ミドルウェアの前に移動してみてください。/favicon.icoまた、一部のブラウザーは少しファンキーな要求を処理するため、使用express.favicon()して問題が解決するかどうかを確認してください。

だから、このようなもの:

...
app.use(express.favicon());
app.use(express.static(__dirname + '/htdocs'));
app.use(express.session({...});
...
于 2013-03-08T09:14:23.667 に答える