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");	
});

  

一、一次從Couchbase 獲取多個 documentjavascript

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

 

使用java

 

result["Name1"]

   

 

二、解決CPU 佔用 100%的問題。express

 

原來是用IO對象直接 emitapp

var io = require(「socket.io」)(http);socket

io.emit(「cmd」+userid , _Str);ui

 

如今把每一個鏈接的socket保存下來socket.io

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

推送時blog

onlineUsers[userid].socket.emit(「cmd」 +user id, _Str);ip

相關文章
相關標籤/搜索