マルチコアアプリについて言及されていないので、複数のコア(クラスター)を使用しているため、クライアント側で適切な数のソケットを一貫して取得できなかったため、追加します。それらを私のmongoインスタンスに保存すると、非常に一貫性があり正確です。このアプローチにより、ブラウザを介してソケット接続をスタイリッシュに表示できます:)。
マングース スキーマ :
var socketSchema = mongoose.Schema({
socket : Number
});
使用法:
//reset to 0 when the app starts ( just in case )
SocketModel.find({ "socket" : 1 } , function(err, deadSockets ) {
if (err){
console.log( err );
}
else{
for( var i = 0 ; i < deadSockets.length ; i++ ){
deadSockets[i].remove();
}
}
});
io.on('connection', function( socket ) {
//I found I needed to make sure I had a socket object to get proper counts consistantly
if( socket ){
var socketEntry = new SocketModel({ "socket" : 1 });
socketEntry.save( function(err ){
if (err){
console.log( err );
}
else{
}
});
}
//On Disconnect
socket.on('disconnect', function() {
SocketModel.findOne({ "socket" : 1} , function(err, deadSocket ) {
if (err){
console.log( err );
}
else{
deadSocket.remove();
}
});
});
});
私はいくつ持っていますか?
SocketModel.count({ "socket" : 1 } , function(err, count ) {
if (err){
console.log(err);
}
else{
var term = "sockets";
if( count == 1 ) term = "socket";
console.log("Current Load: " , count , term );
}
});
注{}
: 空のクエリ オブジェクト ( )を使用するのは好きではないので{ "socket" : 1 }
、代わりにダミーとして使用しました