如何检查 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 与它们相关联以检查重复项。