2017-05-07 1 views
0

socket.io를 사용하여 node.js websocket 솔루션을 작성하기 시작했습니다.웹 소켓 및 NodeJS - 브라우저 탭 및 세션 변경

브라우저가 노드 서버에 성공적으로 연결되고 socket.id 및 console.log (소켓)와 관련된 모든 구성이 표시됩니다. 또한 초기 연결로 사용자 ID를 전달하고이를 서버 측에서 볼 수 있습니다.

질문 : 사용자를 연결에 연결하는 가장 좋은 방법은 확실치 않습니다. socket.id가 변경 될 때마다 페이지가 변경되고 탭이 열리는 것을 볼 수 있습니다. 어떻게하면 사용자를 추적하고 필요한 모든 소켓에 '메시지'를 보낼 수 있습니까? (한 페이지가 될 수도 있고 3 개의 탭이 될 수도 있음).

'express-socket.io-session'을 살펴 보았습니다. 그러나이 상황을 코드화하는 방법을 잘 모르겠습니다.

질문 : 아래에 'io'및 'app'변수가 있습니다. 2를 함께 사용할 수 있습니까? app.use (io);

기본적으로 사용자를 추적 할 수 있기를 원하지만 (세션으로 추측 할 수 있지만 탭과 같은 다른 소켓 ID를 처리하는 방법은 확실하지 않음) 사용자 또는 하나 이상의 소켓에 회신하는 방법을 알고 있어야합니다.

+0

그것은 당신이 당신의 사용자를 인증하는 방법에 따라 서버에서


을 (그들은 분명하지만 로그 아웃 할 때마다 우리는 명시 적으로 공간을 확보 않음) 예를 들어 모든 소켓에 사용자의 자격 증명이있는 토큰이 포함되어있는 경우이 토큰을 사용하여 사용자를 추적 할 수 있습니다. 따라서 특정 사용자에게 메시지를 보내려면 연결을 검색하여 동일한 사용자 토큰으로 연결을 검색하십시오. –

답변

0

SocketIO의 객실에 의존하는 상황을 처리하는 가장 좋은 방법 감사합니다

. 사용자의 고유 ID 뒤에 방의 이름을 지정합니다. 이것은 여러 개의 연결을 즉시 지원합니다. 그런 다음 특정 사용자와 통신해야 할 때마다 메시지 기능을 호출하고 ID, 이벤트 및 관련 데이터를 전달하면됩니다. SocketIO는 세션을 명시 적으로 떠나는 것에 대해 걱정할 필요가 없습니다. 세션 시간이 초과되거나 브라우저 탭이 닫힐 때마다 SocketIO이이를 수행합니다.

var express = require('express'); 
var socketio = require('socket.io'); 

var app = express(); 
var server = http.createServer(app); 
var io = socketio(server); 

io.on('connect', function (socket) { 
    socket.on('userConnected', socket.join); // Client sends userId 
    socket.on('userDisconnected', socket.leave); // Cliend sends userId 
}); 

// Export this function to be used throughout the server 
function message (userId, event, data) { 
    io.sockets.to(userId).emit(event, data); 
} 

클라이언트의 경우 :

var socket = io('http://localhost:9000'); // Server endpoint 

socket.on('connect', connectUser); 

socket.on('message', function (data) { 
    console.log(data); 
}); 

// Call whenever a user logs in or is already authenticated 
function connectUser() { 
    var userId = ... // Retrieve userId somehow 
    if (!userId) return; 
    socket.emit('userConnected', userId); 
} 

// Call whenever a user disconnects 
function disconnectUser() { 
    var userId = ... // Retrieve userId somehow 
    if (!userId) return; 
    socket.emit('userDisconnected', userId); 
}