Как подключиться к нескольким IP-адресам SMSC

#node.js #sms-gateway

#node.js #sms-шлюз

Вопрос:

У меня 4 IP-адреса SMSC, и я подключаю их случайным образом. Есть ли способ подключиться ко 2-му, 3-му или 4-му, если первый IP-адрес SMSC вышел из строя?

Вот мой текущий код.

 
const smsc = [
  '192.168.1.1',
  '192.168.1.2',
  '192.168.1.3',
  '192.168.1.4',
];
const port = 1234
  
//iterate SMSC IP
var smsc_ip = smsc[Math.floor(Math.random() * smsc.length)];

var session = new smpp.Session({host: smsc_ip, port: port});
var didConnect = false;
session.on('connect', function(){
    didConnect = true;
    session.bind_transceiver({
            system_id: 'system_id',
            password: 'password',
            system_type: "SENDER",
            interface_version: 1,
    }, function(pdu) {
        console.log('pdu status', lookupPDUStatusKey(pdu.command_status));
        if (pdu.command_status == 0) {
            console.log('Successfully bound')
        }
    });
});



session.on('close', function(){
    console.log('smpp disconnected')
    if (didConnect) {
        connectSMPP();
    }
});

session.on('error', function(error){
    console.log('smpp error', error)
    didConnect = false;
});


function connectSMPP () {
    // connect to another SMSC IP?
    console.log('smpp reconnecting');
    session.connect();
}

function lookupPDUStatusKey(pduCommandStatus) {
    for (var k in smpp.errors) {
      if (smpp.errors[k] == pduCommandStatus) {
        return k
      }
    }
  }


 

У меня есть функция connectSMPP для повторного подключения сеанса, если сеанс был отключен. Должен ли я также включить новый сеанс внутри connectSMPP для инициализации нового сеанса и использования всех остальных IP-адресов SMSC, а затем выйти, если все IP-адреса SMSC не работают?

Ответ №1:

Попробуйте сохранить свои активные сеансы в главном списке, затем добавьте функцию запроса ссылки вне основного потока, чтобы проверить работоспособность соединения. Вы можете использовать планирование с интервалом в 10 секунд, и если не удалось подключиться к ссылке запроса, удалите ее из основного списка и добавьте в список повторного подключения, который в списке повторного подключения вы можете выполнить методом повторного подключения.