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);

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Socket.IO在Node.js中实现通讯的示例代码: 1. 安装Socket.IO模块: ```shell npm install socket.io ``` 2. 创建服务器端(server.js): ```javascript var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); // 监听客户端连接事件 io.on('connection', function(socket){ console.log('A client connected.'); // 监听客户端发送的消息事件 socket.on('message', function(data){ console.log('Received message from client:', data); // 触发事件告知客户端 io.emit('message', 'Server received your message: ' + data); }); // 监听客户端离开事件 socket.on('disconnect', function(){ console.log('A client disconnected.'); // 触发事件告知服务端 io.emit('disconnect', 'A client disconnected.'); }); }); // 启动服务器 server.listen(3000, function(){ console.log('Server is running on port 3000.'); }); ``` 3. 创建客户端(client.html): ```html <!DOCTYPE html> <html> <head> <title>Socket.IO Client</title> <script src="https://cdn.socket.io/socket.io-3.1.3.min.js"></script> <script> var socket = io(); // 发送消息给服务端 socket.emit('message', 'Hello, server!'); // 监听服务端发送的消息事件 socket.on('message', function(data){ console.log('Received message from server:', data); }); // 监听服务端触发的离开事件 socket.on('disconnect', function(data){ console.log('Server:', data); }); </script> </head> <body> <h1>Socket.IO Client</h1> </body> </html> ``` 请注意,以上代码仅为示例,实际使用时可能需要根据具体需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值