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);
		//其他操作
    });
}

  

 

转载于:https://www.cnblogs.com/chenliang-zibo/p/5400396.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值