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://ip"); 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)){ delete onlineUsers[obj.userid]; onlineCount --; } onlineUsers[obj.userid] = {'userid':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([ "Document1" , "Document2" ], function(err, result) { if(err){ console.log(new Date() + " : ERROR : " + err); } else { NodeEmit(result); } }); } , 10 * 1000); function NodeEmit(result){ for(var user in onlineUsers){ // Document1 _Str_cmd1 = result["Document1"].value["content"][user]; onlineUsers[user].socket.emit("cmd1" , _Str_cmd1); // Document2 if(typeof(result["Document2"].value["content"][user]) != "undefined"){ _Str_cmd2 = JSON.stringify(result["Document2"].value["content"][user]); onlineUsers[user].socket.emit("cmd2" , _Str_cmd2); } } } http.listen(8066 , function(){ console.log("listening on *:8066"); });
客户端 JS
function GetNoticeTipCount() { if ($("#hfAdminID").val() != "") { var adminid = $("#hfAdminID").val(); //连接 var socket = io.connect("ws://ip:8066/", { 'forceNew': true, 'reconnect': true }); socket.emit("login", { userid: adminid }); InitNotice(socket); /*********************************/ // 自动重连,记录状态 socket.on('connect', function(data) { console.log(moment().format('HH:mm:ss') + " 已连接服务器"); //重连成功后重新提交登录请求 socket.emit("login", { userid: adminid }); }); socket.on('connect_failed', function(data) { console.log(moment().format('HH:mm:ss') + " 连接失败"); }); socket.on('error', function(data) { console.log(moment().format('HH:mm:ss') + " ERROR"); }); socket.on('reconnecting', function (data) { console.log(moment().format('HH:mm:ss') + " 重连服务器中"); }); socket.on('reconnect', function (data) { console.log(moment().format('HH:mm:ss') + " 重连服务器成功"); }); socket.on('disconnect', function (data) { console.log(moment().format('HH:mm:ss') + " 连接断开"); }); /***********************************/ } } //初始化提醒 function InitNotice(socket) { socket.on("cmd1", function (_notices) { console.log(moment().format('HH:mm:ss') + " " + _notices); //其他操作 }); socket.on("cmd2", function (_cnc) { console.log(moment().format('HH:mm:ss') + " " + _cnc); //其他操作 }); }