我有一项服务,客户端订阅套接字连接,并监听管道中的更新。客户端订阅了会议室后,我们将发送sendSyncRequest(请参见下面的视图),该调用调用另一个服务以获取所有更新的数据,并通过套接字将其发布回客户端。
socket.io版本从v1.7.3更新到v2.1.1时,一直弹出的问题就出现了。将服务部署到生产服务器后,一切都变得一团糟,我们开始发现每次{sendSyncRequest被命中时都会弹出getaddrinfo ENOTFOUND
错误。
一些其他信息:
错误截图: getadrrinfo ENOTFOUND error
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
如果任何人有任何建议或修正,请分享,我们欢迎获得所有帮助。