2012-03-07 2 views
3

나는 php와 socket.io를 사용하여 알림 시스템을 만들려고합니다. 클라이언트는 socket.io에 연결하여 알림을 기다리고 있습니다. PHP 스크립트는 다른 포트의 curl을 통해 socket.io에 연결하고 업데이트를 게시하여 연결된 클라이언트에게 전달합니다. 클라이언트는 연결 이벤트 후에 메시지로 보내는 ID를 통해 식별됩니다. I user_id에 연결된 소켓 변수를 저장합니다. 모든 것이 잘 작동하지만 얼마 후에 스크립트가 작동을 멈 춥니 다. 몇 시간 후에 배열에 저장된 소켓 변수가있는 것 같습니다. 그러나 내 서버 코드는 아래에 설명처럼 분리에 대한 처리기를 추가해야php와 socket.io를 사용하는 알림 시스템

var notification_port = 8001; 
var oak_port   = 8002; 

var io = require('socket.io').listen(notification_port); 
var clients = new Array(); 

io.sockets.on("connection", function(socket){ 
    socket.on("__identification", function(message){ 
     if (message.id){ 
     console.log("user with session id " + message.id + " connected!"); 
     var sockets = clients[message.id]; 
     if (!sockets){ 
      sockets = new Array(); 
     } 
     sockets.push(socket); 
     clients[message.id] = sockets; 
     } 
    }); 
}); 

var url = require('url'); 
var oakListener = require('http').createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 

    var url_parts = url.parse(req.url, true); 
    var query = url_parts.query; 

    var sockets = clients[query.id]; 
    if (sockets){ 
    for (var i = 0; i < sockets.length; i++){ 
     sockets[i].emit("notification", query); 
     } 
     res.end('ok'); 
    } else { 
    res.end('failed'); 
    } 
}).listen(oak_port); 

답변

0

문제가 있었다, 연결에 대한 매 순간을 분실있다. "연결 해제"기능에서 gargabe을 수집하고 "연결"기능에서 연결을 다시 초기화해야합니다.

1

아래에 게시 :

socket.on('disconnect', function() { 
    //delete socket from sockets; 
});