getaddrinfo ENOTFOUND после обновления socket.io - PullRequest
0 голосов
/ 12 октября 2018

У меня есть служба, где клиенты подписываются на сокетное соединение и прослушивают обновления, поступающие по конвейеру.После того, как клиент подписался на комнату, мы отправляем sendSyncRequest (см. Ниже), который вызывает другую службу для получения любых обновленных данных и публикует их обратно клиенту через комнату с сокетами.

Возникает проблема, которая продолжает появляться.когда версия socket.io была обновлена ​​с v1.7.3 до v2.1.1.После развертывания службы на производственном сервере все идет не так, как надо, и мы начинаем видеть ошибку getaddrinfo ENOTFOUND, которая появляется каждый раз, когда посылается sendSyncRequest.

Некоторая дополнительная информация:

  • ОСВерсия: Ubuntu 14.04.3 LTS (GNU / Linux 3.13.0-74-generic x86_64)
  • Версия узла: 4.4.0
  • Версия Socket.io: 2.2.1
  • Версия запроса: 2.81.0

Скриншот ошибки: ошибка ENOTFOUND getadrrinfo

Код sendSyncRequest:

function sendSyncRequest(service, accessToken, lastUpdate, socketId, method) {
  var uri = service.scheme + '://' + service.host + ':' + service.port + service.path;

  var options = {
    uri:       uri,
    strictSSL: false,
    timeout:   NO_RESPONSE_TIMEOUT,
    json:      true,
    headers: {
      Authorization: 'Bearer ' + accessToken
    }
 };

 if (method === 'get') {
   options.qs = {
     lastUpdate: lastUpdate,
     socketId: socketId
   };
 } else {
   options.body = {
   lastUpdate: lastUpdate,
   socketId: socketId
 };
}

  request[method || 'post'](options, function(err, response) {
    if (err) {
      log.error('sendSyncRequest', err);
      return;
    }

    if (response.statusCode !== 200) {
      log.error('sendSyncRequest %d %s', response.statusCode, http.STATUS_CODES[response.statusCode]);
      return;
    }
  }
);}

Код сервера сокетов:

module.exports.init = function (callback) {
log.info('starting new Socket.IO server');
io.origins('*:*');

log.info('initializing socket.io server');

io.attach(server.getServer());

io.on('disconnect', function (socket) {
    log.info('socket.io server disconnect ', socket);
});

io.on('connection', function (socket) {
    log.info('new socket.io client %s@%s (%s) connection',
        socket);

    socket.emit('successful_connection', {socketId: socket.id});

    socket.on('disconnecting', function () {
        log.info('socket.io client %s@%s (%s) disconnecting',
            socket.userData.user,
            socket.userData.domain,
            socket.id);

        for (var room in socket.rooms) {
            if (socket.rooms.hasOwnProperty(room)) {
                var count = io.sockets.adapter.rooms[room].length;
                log.debug('current room %s connected client count = %d', room, count);

                if (count <= 1) {
                    log.info('unsubscribing from room %s', room);
                    cacheClient.unsubscribe(room);
                }
            }
        }
    });
});
};

Мы также рассмотрели следующие проблемы с github, в которых говорится об ограничениях файловых дескрипторов, но в конечном итоге это похоже на краткосрочное решение.

https://github.com/nodejs/node-v0.x-archive/issues/5545#issuecomment-19007785

https://github.com/nodejs/node-v0.x-archive/issues/5488

Если у кого-либо есть какие-либо предложения или исправления, пожалуйста, поделитесь, мы будем рады любой помощи, которую мы можем получить.

...