2013-04-25 2 views
0

프런트 엔드에 HTML5 및 Javascript를 사용하고 백엔드에 Node.js를 사용하여 간단한 웹 응용 프로그램을 작성합니다. 또한 Socket.IO를 사용하여 클라이언트와 서버간에 데이터를주고받습니다. 모든 사람이 로그인하고 대화방에 참여하는 채팅 페이지가 있다고 가정 해보십시오. 백엔드의 채팅방에있는 모든 사람들을 추적합니다. 내가 원하는 것은 그 방을 나가면 방에서 사람을 제거하는 것입니다. 예를 들어 누군가 브라우저를 닫으면 더 이상 활성 사용자로 표시되지 않아야합니다.Socket.IO - 연결이 끊어진 사람을 찾는 방법은 무엇입니까?

Socket.IO에는 이것을 수행하는 완벽한 도구 인 연결 끊김 이벤트가 있습니다. 예를 들어 다음 코드를 실행할 때 :

socket.on("disconnect", function(){ 
    console.log("DISCONNECTED"); 
}); 

누군가가 브라우저를 종료하면 "연결이 끊어졌습니다"가 인쇄됩니다. 이제 내 질문은 브라우저를 정확히 닫은 사람을 어떻게 알 수 있습니까? 데이터가 연결 해제 이벤트로 전달되지 않으므로 연결 끊기 이벤트를 설정 한 사람을 정확히 확인해야합니다. 어떤 도움이라도 대단히 감사하겠습니다!

답변

4

당신은 할 수 :

socket.on("disconnect", function(){ 
    console.log(this.id); // this.id is the 'id' of the socket that got disconnected 
}); 
0

귀하의 질문은 이해되지 않는다. 각 소켓은 단일 클라이언트에 대한 연결입니다. 여기

당신은 소켓의 이름을 연결 한 다음 같은 이름을 인쇄 할 수있는 방법을 때 같은 소켓 연결이 끊어 :

io.sockets.on('connection', function(socket) { 
    var name = ""; 
    socket.on('set-name', function(_name) { 
     name = _name; 
    }); 
    socket.on("disconnect", function(){ 
     console.log("DISCONNECTED "+name); 
    }); 
}); 

당신이 연결 개체를 유지하기 때문에 이미 손실되고있는 연결 알고 socket

1

기본적으로 'connect'이벤트를 수신하면 클라이언트가 서버에 연결할 때마다 소켓 객체가 생성됩니다. 그리고 그 소켓 객체에 클라이언트 정보를 저장할 수 있습니다. 이 기사를 참조하고 코더가 서버 측에서 pluarl 양식 '소켓'을 사용하는 서버 측 코드에주의를 기울일 수 있습니다. 그러면 서버 측에서 많은 클라이언트 소켓이 생성됩니다! http://psitsmike.com/2011/10/node-js-and-socket-io-multiroom-chat-tutorial/

다음 샘플이 도움이 되길 바랍니다.

//server side 
var io = require('socket.io').listen(80) 
// sockets here, not socket 
io.sockets.on('connection', function(socket){ 
    // every connection will create a socket 
    socket.on('newUser', function(name){ 
    socket.id = name; // socket stores the username 
    }); 
    socket.on('disconnect', function(){ 
    console.log(socket.id); // retrieve it from socket object 
    }); 
    // more functionality goes... 
}); 

및 클라이언트 측

var socket = io.connect('http://localhost:80'); 
socket.on('connect', function(){ 
    //emit newUser event so that client info is stored 
    socket.emit('newUser', prompt('Please enter your name!')); 
    //.... more functionality goes 
}); 

희망이 당신이 이해하는 데 도움이 될 것입니다!

+0

이것은 내가 찾고있는 것입니다. 감사합니다! socket.IO의 설명서가 부족하고 탐색하기가 어렵습니다. 나는 서버 측에 'connect'이벤트가 있다는 것을 전혀 알지 못했다. –

+0

** ** - ** 나는 id가 이미 socket-ID를 저장하기 위해 사용 되었기 때문에'socket.id' 대신에'socket.userName'과 다른 것을 사용할 것입니다. – amit

관련 문제