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

      

  • 相关阅读:
    处理图片
    打死都不放手
    美白
    词云
    太阳花绘制
    测评软件Lemon教程
    --解释?说明:--
    T1 数字配对 题解
    P1100 高低位交换
    P1143 进制转换
  • 原文地址:https://www.cnblogs.com/chenliang-zibo/p/5400396.html
Copyright © 2020-2023  润新知