Nodejs Socket.io没有连接

时间:2015-01-10 12:10:03

标签: node.js express socket.io

我在我的应用程序中连接Socket但配置不匹配,因为哪个套接字没有连接。可能是什么问题呢?我指的是“用Express构建Web应用程序开发”来构建

app.js

var express = require('express');
var app = express();
var morgan = require('morgan'); //HTTP request logger middleware for node.js
var flash = require('connect-flash');
var multiparty = require('connect-multiparty');
var cookieParser = require('cookie-parser');
var cookieSession = require('express-session');
var bodyParser = require('body-parser'); //Node.js body parsing middleware
var methodOverride = require('method-override');
var errorHandler = require('errorhandler');
var config = require('./config.js');
var passport = require('passport');
var fs = require('fs');
var sessionStore = new cookieSession.MemoryStore();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);

app.set('view engine', 'jade');
app.set('views', __dirname + '/views');

morgan.token('id', function getId(req) {return req.id })

var accessLogStream = fs.createWriteStream(__dirname + '/log/systemAccessWithToken.log', {flags: 'a'})

app.use(assignId)
app.use(morgan(':id :method :url :response-time', {stream: accessLogStream}))

function assignId(req, res, next) {
    next()
}

app.use(bodyParser.json()); //middleware that only parses json

app.use(bodyParser.urlencoded({extended: true}));

app.use(methodOverride(function(req, res) {
    if (req.body && typeof req.body === 'object' && '_method' in req.body) {
        var method = req.body._method;
        delete req.body._method;
        return method;
    }
}));

app.use(cookieParser());
app.use(cookieSession({
    store: sessionStore,
    secret: config.sessionSecret,
    cookie: {maxAge: config.sessionMaxAge}
}));
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash());

if (app.get('env') === 'development') {
    app.use(errorHandler());
}
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.set('Access-Control-Allow-Methods', 'GET, POST');
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    next();
});

app.use(express.static(__dirname + '/public'));

require('./app/passport')(passport); // pass passport for configuration
var socketcon = require('./app/mainSocket.js');
socketcon.socketconfig(app, io, sessionStore, cookieParser);

require('./routes/controller.js')(app, passport); // load our routes and pass

server.listen(config.port);

mainSocket.js

var modules = require('../externalModules.js');
var dbConnection = modules.dbConnection;
var cryptography = modules.cryptography;

var onlineUsers = {};
var onlineUsersSocketid = {};

exports.socketconfig = function(app, io, sessionStore, cookieParser) {
    io.set('authorization', function(data, callback) {
        if (!data.headers.cookie) {
            return callback('No cookie transmitted.', false);
        }

        cookieParser(data, {}, function(parseErr) {
            if (parseErr) {
                return callback('Error parsing cookies.', false);
            }

            var sidCookie = (data.secureCookies && data.secureCookies['myuser.sid']) || (data.signedCookies && data.signedCookies['myuser.sid']) || (data.cookies && data.cookies['myuser.sid']);

            sessionStore.load(sidCookie, function(err, session) {
                if (err || !session || !session.passport.user) {
                    callback('socket Not logged in.', false);
                } else {
                    data.session = session;
                    socketSession = session;
                    console.log("socketSession value " + JSON.stringify(socketSession));
                    callback(null, true);
                }
            });
        });
    });


    io.sockets.on('connection', function(socket) {
        console.log("socket connected");
        console.log("socket.id " + socket.id);

        socket.encryptedUserid = socketSession.passport.user.userId;
        var devicetype = "web";

        var secUserSalt = socketSession.passport.user.salt;

        socket.userid = cryptography.crypto.fnDecryption(
            socket.encryptedUserid, secUserSalt);

        var isMobile = socketSession.passport.user.isMobile;

        var devicetype = "web";
        if (isMobile) {
            devicetype = "mobile";
        }
        socket.on('user:join', function() {
            //==============================develpoment(Aug21)====================

            if (socket.userid in onlineUsersSocketid) {
                onlineUsersSocketid[socket.userid].sockets_ids
                    .push(socket.id);
                onlineUsersSocketid[socket.userid].devicetype
                    .push(devicetype);
            } else {
                onlineUsersSocketid[socket.userid] = {
                    "sockets_ids": [socket.id], // array for all sockets id of this user
                    "devicetype": [devicetype]
                }

            }
            console.log("onlineUsersSocketid " + JSON.stringify(onlineUsersSocketid));
        });

        socket.on('disconnect', function() {
            delete onlineUsersSocketid[socket.userid];
        });
    });
} // end of export module

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

根据socket.io docs,这两个服务器端初始化序列应该有效:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);

var app = require('express').createServer();
var io = require('socket.io')(app);
app.listen(80);

你没有其中任何一个。