我没有看到任何关于多核应用程序的提及,所以我只想补充一点,因为我使用的是多核(集群),所以我无法在客户端始终获得正确数量的套接字,所以我结束了将它们保存到我的 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 }
一个虚拟对象