如何检查 Azure IOT 中心发件人是否已停止使用 node.js 和 socket.io
How to check if Azure IOT Hub sender has stopped using node.js and socket.io
我有两个程序,一个发送者和一个接收者。发送方向 IOT Hub 上的设备发送一些消息,只要发送方发送这些消息,接收方就会接收这些消息。我正在使用 socket.io 将这些消息广播给连接的客户端。但是,当发送方停止时,接收方也会停止,但发送方发送的最后一条消息将无限广播,直到我关闭接收方或发送方再次启动并发送新消息。最后一条消息将被无限复制和广播。如何查看发送程序是否已经停止?
这是发件人程序:
var clientFromConnectionString = require('azure-iot-device-mqtt').clientFromConnectionString;
var Message = require('azure-iot-device').Message;
var connectionString = 'conn_string'
var client = clientFromConnectionString(connectionString);
var avgTemperature = 20;
var printResult = function (err, res) {
if (err) {
console.log('send error: ' + err.toString());
return;
}
console.log('send status: ' + res.constructor.name);
};
setInterval(function () {
var currentTemperature = avgTemperature + (Math.random() * 10) - 2;
var data = JSON.stringify({
deviceId: 'test',
temperature: currentTemperature,
latitude: 50.286264,
longitude: 19.104079,
time: Date.now()
});
var message = new Message(data);
console.log("Sending message: " + message.getData());
client.sendEvent(message, printResult);
}, 5000);
这是接收器和向客户端广播的socket.io:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var EventHubClient = require('azure-event-hubs').Client;
var connectionString = 'conn_string'
var printError = function (err) {
console.log(err.message);
};
var result;
var printMessage = function (message) {
console.log('Message received: ');
result = JSON.stringify(message.body);
console.log('message: ' + result);
/* io.on('connection', function(socket){
socket.on('chat message', function(msg){
io.emit('chat message', result);
});
}); */
console.log('');
};
count =0;
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
console.log('user connected');
socket.on('chat message', function(msg){
io.emit('chat message', result);
});
socket.on('disconnect', function(){
console.log('user disconnected');
socket.removeAllListeners('disconnect');
io.removeAllListeners('connection');
});
});
var client = EventHubClient.fromConnectionString(connectionString);
client.open()
.then(client.getPartitionIds.bind(client))
.then(function (partitionIds) {
return partitionIds.map(function (partitionId) {
return client.createReceiver('$Default', partitionId, { 'startAfterTime' : Date.now()}).then(function(receiver) {
console.log('Created partition receiver: ' + partitionId)
receiver.on('errorReceived', printError);
receiver.on('message', printMessage);
});
});
})
.catch(printError);
http.listen(3000, function(){
console.log('listening on *:3000');
});
根据您的代码。每当发送方停止发送时,接收方将不会收到消息,将等待发送方发送新消息。但是,如果您仍然想检查,您可以使用发件人邮件的序列号或将 Id 与它们相关联以检查重复项。
我有两个程序,一个发送者和一个接收者。发送方向 IOT Hub 上的设备发送一些消息,只要发送方发送这些消息,接收方就会接收这些消息。我正在使用 socket.io 将这些消息广播给连接的客户端。但是,当发送方停止时,接收方也会停止,但发送方发送的最后一条消息将无限广播,直到我关闭接收方或发送方再次启动并发送新消息。最后一条消息将被无限复制和广播。如何查看发送程序是否已经停止?
这是发件人程序:
var clientFromConnectionString = require('azure-iot-device-mqtt').clientFromConnectionString;
var Message = require('azure-iot-device').Message;
var connectionString = 'conn_string'
var client = clientFromConnectionString(connectionString);
var avgTemperature = 20;
var printResult = function (err, res) {
if (err) {
console.log('send error: ' + err.toString());
return;
}
console.log('send status: ' + res.constructor.name);
};
setInterval(function () {
var currentTemperature = avgTemperature + (Math.random() * 10) - 2;
var data = JSON.stringify({
deviceId: 'test',
temperature: currentTemperature,
latitude: 50.286264,
longitude: 19.104079,
time: Date.now()
});
var message = new Message(data);
console.log("Sending message: " + message.getData());
client.sendEvent(message, printResult);
}, 5000);
这是接收器和向客户端广播的socket.io:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var EventHubClient = require('azure-event-hubs').Client;
var connectionString = 'conn_string'
var printError = function (err) {
console.log(err.message);
};
var result;
var printMessage = function (message) {
console.log('Message received: ');
result = JSON.stringify(message.body);
console.log('message: ' + result);
/* io.on('connection', function(socket){
socket.on('chat message', function(msg){
io.emit('chat message', result);
});
}); */
console.log('');
};
count =0;
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
console.log('user connected');
socket.on('chat message', function(msg){
io.emit('chat message', result);
});
socket.on('disconnect', function(){
console.log('user disconnected');
socket.removeAllListeners('disconnect');
io.removeAllListeners('connection');
});
});
var client = EventHubClient.fromConnectionString(connectionString);
client.open()
.then(client.getPartitionIds.bind(client))
.then(function (partitionIds) {
return partitionIds.map(function (partitionId) {
return client.createReceiver('$Default', partitionId, { 'startAfterTime' : Date.now()}).then(function(receiver) {
console.log('Created partition receiver: ' + partitionId)
receiver.on('errorReceived', printError);
receiver.on('message', printMessage);
});
});
})
.catch(printError);
http.listen(3000, function(){
console.log('listening on *:3000');
});
根据您的代码。每当发送方停止发送时,接收方将不会收到消息,将等待发送方发送新消息。但是,如果您仍然想检查,您可以使用发件人邮件的序列号或将 Id 与它们相关联以检查重复项。