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://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");	
    });
    

      

    1、一次从Couchbase 获取多个 document

    bucket.getMulti([ "Name1" , "Name2" ], function(err, result) {
    	if(err){			
    	}
    	else{			
    	}
    });
    

    使用

    result["Name1"]
    

       

    2、解决CPU 占用 100%的问题。

    原来是用IO对象直接 emit

    var io = require(“socket.io”)(http);

    io.emit(“cmd”+userid , _Str);

    现在把每个连接的socket保存下来

    onlineUsers[obj.userid] = {‘c_id’:obj.userid,‘socket’:socket};

    推送时

    onlineUsers[userid].socket.emit(“cmd” +user id, _Str);

  • 相关阅读:
    美化的滚动条
    网站系统开发参考网址
    正则表达式获取URL参数
    类实例 及 实例化对象 对象引用
    C# 静态方法 静态属性 调用静态方法
    C# 静态方法调用非静态方法
    winform 窗体间传值
    从数据库中读出数据并输出
    数据库链接字符串
    DbHelper
  • 原文地址:https://www.cnblogs.com/chenliang-zibo/p/5389939.html
Copyright © 2011-2022 走看看