zoukankan      html  css  js  c++  java
  • 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);
    		//其他操作
        });
    }
    

      

  • 相关阅读:
    dbvisualizer free 9.5.6中文乱码
    Tomcat下编译没哟class源文件
    Microsoft Visual C++ Runtime error解决方法
    eclispe中svn插件的安装和使用教程(二)
    eclipse安装SVN插件的两种方法(一)
    解决eclipse中配置Tomcat中没有server选项
    【原创精品】mac 彻底卸载趋势科技
    【原创】beyond compare 解决文件一样,对比有差异的问题
    Git各大平台(win/Linux/Mac)图形化界面客户端大汇总
    【原创】用python连接thrift Server 去执行sql的问题总汇
  • 原文地址:https://www.cnblogs.com/chenliang-zibo/p/5400396.html
Copyright © 2011-2022 走看看