2017-09-28 1 views
0

나는 nodejs에 새로워서 이상하게 들릴지 모르지만 필요한 것은 내가 로그인 한 사용자가 서로 로그인하여 하나 또는 여러 개의 채팅을 할 수있는 채팅 응용 프로그램을 만들고 싶지만 문제는 if 사용자는 여기에 내가nodejs에서 socketid를 유지 관리하는 방법은 무엇입니까?

서버 측

var app = require('express')(); 
var fs = require('fs'); 
var forceSsl = require('express-force-ssl'); 

app.use(forceSsl); 
var options = { 
    key: fs.readFileSync('server.key'), 
    cert: fs.readFileSync('server.crt') 
}; 
var server = require('https').createServer(options, app).listen(3000,function(){ 
     console.log("Https server started on port 3000"); 
}); 
var io = require('socket.io').listen(server); 


var sockets = {}; 
var users = {}; 
io.on('connection', function(socket) 
{ 
    console.log("Hi i am connected"); 
    // Emit the connected users when a new socket connects 
    for (var i in sockets) 
    { 
     socket.emit('user.add', { username: sockets[i].username, id: sockets[i].id });  
    }  
    // Add a new user 
    socket.on('username.create', function (data) 
    { 
     socket.username = data; 
     sockets[socket.id] = socket; 
     users[data]  = socket.id; 
     io.emit('user.add',{ username: socket.username, id: socket.id }); 
    });  
    // Send the hug event to only the socket specified 
    socket.on('pm', function (data) 
    { 
     io.to(users[data.username]).emit('message', data.message);  
    }); 
    // Remove disconnected users 
    socket.on('disconnect', function() 
    { 
     delete sockets[socket.id]; io.emit('user.remove', socket.id);  
    }); 
}); 

클라이언트 측

012을 사용하는 내 코드는 내가 서버 측에서 유지 보수 사용자 목록의 소켓 ID를 유지할 수있는 방법을 다음 브라우저를 새로 고침
+0

당신은'노드 js'의 세션에서 소켓 ID를 저장할 수 있습니다. –

+0

은 새로 고침 페이지 후 그 작업입니까? –

+0

이것을 확인하십시오 - https://www.tutorialspoint.com/expressjs/expressjs_sessions.htm –

답변

1

입니다 :

  1. socket.io-sessions
  2. cookie-session

Cookie-parser and express-session come inside express package before express 4.0

확인이를, 미들웨어는 당신이 당신의 문제를 해결하는 데 도움이 될 수NPM 패키지.

Middleware between express-session and socket.io

작품> 4.0.0 및 socket.io> 1.0.0표현하고 호환 뒤로되지 않습니다.

예 :

var app = require('express')(), 
    server = require("http").createServer(app), 
    io = require("socket.io")(server), 
    session = require("express-session")({ 
    secret: "my-secret", 
    resave: true, 
    saveUninitialized: true 
    }), 
    sharedsession = require("express-socket.io-session"); 


// Attach session 
app.use(session); 

// Share session with io sockets 

io.use(sharedsession(session)); 

io.on("connection", function(socket) { 
    // Accept a login event with user's data 
    socket.on("login", function(userdata) { 
     socket.handshake.session.userdata = userdata; 
     socket.handshake.session.save(); 
    }); 
    socket.on("logout", function(userdata) { 
     if (socket.handshake.session.userdata) { 
      delete socket.handshake.session.userdata; 
      socket.handshake.session.save(); 
     } 
    });   
}); 

server.listen(3000); 

주 - 나는 모든 패키지 껄를 테스트하지 않았는 서버 측에서 구현됩니다.

또는 다음이 npm package 사용하지 않으려는 경우 : 당신은 변수로 소켓 ID를 검색하고 angular-local-storage으로 설정할 수 있습니다

. 따라서 angular-local-storage 페이지를 새로 고친 후 저장하십시오.

예 -

localStorageService.set('id', socketid); 
+0

frontend에서 angularjs를 사용하고 있습니다. 채팅 시스템에 nodejs와 socket.io가 필요하므로 내 문제에 대해 적절한 해결책이 있습니까? –

+0

그래서 다른'npm 패키지 '를 사용하고 싶지 않으십니까? –

+0

아니요 다른 패키지를 사용하는 데 문제가 없지만 클라이언트 측에 어떻게 사용할 수 있습니까?이 문제를 해결할 수 있다면 주된 문제입니다. –

2

어레이의 소켓 ID를 유지 관리 할 수 ​​있습니다. 먼저 userID로 checkIn 이벤트를 호출하여 socket id를 userid로 저장해야합니다. 여기에서 나는 많은 npm package 어떤 당신이 Socket.IO의 세션 ID를 저장하는 데 사용할 수 있습니다, 발견 몇 가지 조사 후 예를

var socketids=[]; 
io.on('connection', function(socket) 
{ 
socket.on('checkedIn', function (data) 
socketids[socket.id]=data.userId 
}) 

}) 
+0

브라우저가 새로 고친 것이 무엇이며 어떻게 사용자 목록을 관리 할 수 ​​있습니까? –

+0

그러면 항상 업데이트 된 소켓 ID –

관련 문제