2013-06-17 2 views
0

사용자가 POST 요청을 보내고, 익스프레스에서 경로를 설정하고, 게시물 데이터를 가져 와서 유효성을 검사하고, db에 저장 한 다음 모든 사용자에게 브로드 캐스트해야하는 시나리오가 있습니다. 연결된 소켓.외부 범위에서 socket.io 범위에 액세스

Var a = {}; //global 
io.sockets.on('connection',function(socket){ 
    a.inner = function(data){ 
     socket.broadcast.emit('boo',data) 
    } 
} 

그런 a.inner(data)

이 정상인가요 전화 : 소켓 변수가 io.sockets.on('connection') 내에서 사용할 수 있기 때문에 그러나 나는 폐쇄에이 방법을 그것의 내부 범위에 액세스 할 수 있습니다? 내부 함수에 액세스하거나 호출하는 더 좋은 방법이 있습니까?

감사

+0

위는 작동하지 않습니다. 소켓 a.inner 호출은 기대하는 소켓이 아닐 수도 있습니다. –

답변

0

나는 항상 이것을 사용은 :

var userIdSocketMapper = {}; 
io.sockets.on('connection', function (socket) { 
    var userId = socket.handshake.userId; 
    userIdSocketMapper[userId] = socket; 
}); 

app.post('/:userId', function(req, res) { 
    var socket = userIdSocketMapper[req.params.userId]; 
    if (socket) { 
    socket.broadcast.emit('boo', data); 
    } 
}); 
+0

사용자가 커짐에 따라 userIdSocketMapper가 커지고 불필요한 저장소이기도하며 클라이언트가 참조로 인해 연결이 끊긴 경우에도 소켓 개체가 gc'ed되지 않습니다. 하지만 좋은 아이디어 –

+0

이것이 가장 좋은 옵션입니다. 감사 –

관련 문제