2015-01-10 3 views
0

Я подключаю Socket в своем приложении, но конфигурация несовместима, из-за которой сокет не подключается. В чем может быть проблема? Я имею в виду "Разработка веб-приложений Mastering с Экспресса" для структурированияNodejs Socket.io не подключается

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 

Что может быть проблема?

+0

Как выглядит ваш код клиента? – japrescott

ответ

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); 

Вы не должны либо из них.

+0

что у меня есть «var server = http.createServer (приложение); var io = require ('socket.io'). Listen (server); server.listen (config.port); ' – pitu

Смежные вопросы