国内综合精彩aⅤ无码不卡_日本少妇做爰全过程_欧美性爱在线播放免费_午夜?V日韩一区二区_免费a级毛片无码免费播放_成在人线av无码喷水_亚洲精品网站色视频_国产婷婷精品成人_老师撩起裙子让我桶的视频_秋霞影院国产

NodeJS的數(shù)據(jù)轉(zhuǎn)發(fā)器

作者:z494627 | 更新時間:2016-05-16 | 瀏覽量:2708

   如果多個設備每個設備傳遞一個數(shù)據(jù)接口的數(shù)據(jù),并且發(fā)送到貝殼物聯(lián)同一個設備,需要一個網(wǎng)關來處理.因為平臺不允許一個設備由多個物理設備登錄.

   使用方式:

    1.運行環(huán)境;nodeJs 4.4.4

    2.某一個設備Checkin一下就OK,不需要多次checkin,轉(zhuǎn)發(fā)器會自己每個40秒發(fā)送一次checkin,保持登錄狀態(tài).

    3.轉(zhuǎn)發(fā)器會將所有設備的數(shù)據(jù)組合起來,定時(5秒)發(fā)送一次,防止多個設備發(fā)送沖突(兩次數(shù)據(jù)小于3秒會被平臺忽略)

    4.目前暫無斷線重啟的功能.

var net=require("net")

var sockets=[]
var bigiot={}
var AppID="AppID"
var APPKey="APPKey"

var cmdCheckin='{"M":"checkin","ID":"'+AppID+'","K":"'+APPKey+'"}\n';

//創(chuàng)建一個Client與貝殼物聯(lián)平臺通信
var client=net.createConnection(8181,'www.placeboworld.cn',function(){
	//連通后CheckIn
	console.log('client Connect');
	
	//創(chuàng)建Server與設備通信
	var server=net.createServer();

	server.on('connection',function(socket){
	 
		//連接后發(fā)送貝殼的歡迎信息
		console.log('\033[96mnew connection \033[39m');
		socket.write('{"M":"WELCOME TO BIGIOT"}\n');
		sockets.push(socket);

		//接收到數(shù)據(jù)接口更新指令,轉(zhuǎn)發(fā)到平臺
		socket.on('data',function(data){
			var mydata=JSON.parse(data);			
			//通過checkin指令確認AppID和APPKey
			if(mydata.M=='checkin'){
				AppID=mydata.ID;
				APPKey=mydata.K;
				cmdCheckin='{"M":"checkin","ID":"'+AppID+'","K":"'+APPKey+'"}\n';
				client.write(cmdCheckin);

				//定時5秒發(fā)送一次數(shù)據(jù)
				setInterval(function(){
					if(!bigiot){
						console.log(JSON.stringify(bigiot));
						client.write(JSON.stringify(bigiot)+'\n');
					}
				},5000);

			}

			//接收到數(shù)據(jù)接口更新指令,組合出需要發(fā)送的數(shù)據(jù),用于多客戶端更新
			//統(tǒng)一發(fā)送是為了防止多個設備發(fā)送相隔時間小于3秒,平臺不接受
			if(mydata.M=='update'){				
				bigiot.M=mydata.M;
				bigiot.ID=AppID;					 
				if(!bigiot.V){
					bigiot.V={}
				}				 	
				for(var index in mydata.V){
					bigiot.V[index]=mydata.V[index];					 
				}	
				console.log(JSON.stringify(bigiot));			
			}	
		});
	});

	server.on('error', function(e) {
		console.log(e);
	});
	
	server.on('close', function() {  
		console.log("client disconnected");
        sockets.splice(sockets.indexOf(socket), 1);           
    }); 

	server.listen(800,function(){
		console.log('\033[96m  server listen on *:800\033[39m');
	});
	
});

//收到平臺指令,轉(zhuǎn)發(fā)客戶端
client.on('data',function(data){
	console.log(data.toString('utf-8'));
	var commander=JSON.parse(data.toString('utf-8'));
	console.log("Len:"+sockets.length);

	//接收到操作指令,轉(zhuǎn)發(fā)給可操作客戶端
	if(commander.M=='say'){
		console.log("Recive:"+commander.C);
		for (var i=0; i < sockets.length; i++ ) {  
		    send_to_socket(sockets[i], data);  
        }   
	}
});

function send_to_socket(socket, message) {  
	if(socket.writable){
    	socket.write(message + '\n');  
    } 
}
client.on('end',function(){
	console.log('client disconnected');
});

client.on('error',function(e){
	console.log(e);
});

//心跳包
setInterval(function(){	
	client.write(cmdCheckin);
},40*1000);

  希望能給大家開拓一點思路.


  使用方法:

  1. 安裝nodejs,到https://nodejs.org/en/download/去下載與硬件對應的nodejs(4.4.4)下載后安裝.

  2. 將上面代碼復制后保存到BigiotMiddle.js文件;

  3. 運行node BigiotMiddle.js即可.



評論:共1條

貝殼物聯(lián) 評論于:2016-05-18 08:18:28
非常感謝分享-_-!
返回頂部