//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