NodeJS + Socket.IO 消息推送

//socket.io
var app = require("express")();
var http = require("http").Server(app);
var io = require("socket.io")(http);

//couchbase
var couchbase = require("couchbase");
var cluster = new couchbase.Cluster("couchbase://192.168.1.1");
var bucket = cluster.openBucket("name","pass");

var onlineUsers = {};
var onlineCount = 0;

io.on("connection" , function(socket){

	socket.on("login" , function(obj){
		socket.name = obj.userid;
		console.log(new Date() + " : 编号" + obj.userid + "员工已登录!");

		if(!onlineUsers.hasOwnProperty(obj.userid)){
			//onlineUsers[obj.userid] = obj.userid;
			onlineUsers[obj.userid] = {'c_id':obj.userid,'socket':socket};
			onlineCount ++;
		}
	});

	socket.on("disconnect" , function(){
		if(onlineUsers.hasOwnProperty(socket.name)){
			var obj = {userid:socket.name};
			delete onlineUsers[socket.name];
			onlineCount --;
			console.log(new Date() + " : 编号" + obj.userid+'已登出!');
		}
	});

});


setInterval(function(){
	
	bucket.getMulti([ "Name1" , "Name2" ], function(err, result) {
		if(err){
			console.log(new Date() + " : ERROR : " + err);
		}
		else
		{
			NodeEmit(result);
		}
	});		

} , 10 * 1000);

function NodeEmit(result){
	for(var user in onlineUsers){
			_Str_Name1 = result["Name1"].value["content"][user];
			//io.emit("cmd" + user.toString() , _Str);
			onlineUsers[user].socket.emit("cmd" + user.toString() ,_Str_Name1);
			
			// 
			if(typeof(result["Name2"].value["content"][user]) != "undefined"){
				_Str_Name2 = JSON.stringify(result["Name2"].value["content"][user]);
				//io.emit("cmd2" + user.toString() , _Str_Name2);
				onlineUsers[user].socket.emit("cmd2" + user.toString() , Str_Name2);
			}
			
		}
}

http.listen(8066 , function(){
	console.log("listening on *:8066");	
});

  

1、一次从Couchbase 获取多个 document

bucket.getMulti([ "Name1" , "Name2" ], function(err, result) {
	if(err){			
	}
	else{			
	}
});

 

使用

 

result["Name1"]

   

 

2、解决CPU 占用 100%的问题。

 

原来是用IO对象直接 emit

var io = require(“socket.io”)(http);

io.emit(“cmd”+userid , _Str);

 

现在把每个连接的socket保存下来

onlineUsers[obj.userid] = {‘c_id’:obj.userid,‘socket’:socket};

推送时

onlineUsers[userid].socket.emit(“cmd” +user id, _Str);

posted @ 2016-04-14 09:46  我知道你的存在  阅读(3437)  评论(0编辑  收藏  举报