2012-03-07 24 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

問題だった、接続はおよそ毎分失われていること。あなたは "切断"機能でギャグを収集し、 "接続"機能で接続を初期化する必要があります

1

の下に掲載されています

socket.on('disconnect', function() { 
    //delete socket from sockets; 
}); 
関連する問題