如何检查Azure IOT Hub发件人是否已停止使用node.js和socket.io

我有两个程序,一个发件人和一个接收者。 发送者在IOT Hub上发送一些消息给设备,接收者只要发送者发送它们就会接收到这些消息。 我正在使用socket.io将这些消息广播到连接的客户端。 但是,当发送者停止时,接收者也会停下来,但发送者发送的最后一条消息会无限播放,直到我closures接收者或者发送者再次启动并发送新的消息。 最后一条消息将被复制并无限播放。 如何检查发件人程序是否已经停止?

这是发件人的程序:

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来检查重复邮件。