Нello! Я пытаюсь представить клиентские соединения через http с узлом. Прямо сейчас у меня что-то вроде:
let names = [ 'john', 'margaret', 'thompson', /* ... tons more ... */ ];
let nextNameInd = 0;
let clientsIndexedByIp = {};
let createNewClient = ip => {
return {
ip,
name: names[nextNameInd++],
numRequests: 0
};
};
require('http').createServer((req, res) => {
let ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
// If this is a connection we've never seen before, create a client for it
if (!clientsIndexedByIp.hasOwnProperty(ip)) {
clientsIndexedByIp[ip] = createNewClient(ip);
}
let client = clientsIndexedByIp[ip];
client.numRequests++;
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(client));
}).listen(80, '<my public ip>', 511);
Я запускаю этот код на каком-то удаленном сервере, и он работает нормально; Я могу запросить этот сервер и получить ожидаемый ответ. Но у меня есть проблема: мой ноутбук и мой смартфон подключены к одному и тому же Wi-Fi; если я запрашиваю этот сервер с моего ноутбука и смартфона, сервер считает, что оба устройства имеют один и тот же IP-адрес, и он создает только один «клиентский» объект для них обоих.
например. параметр «имя» ответа одинаков для каждого.
Проверка whatsmyip.org на моем ноутбуке и смартфоне показывает мне один и тот же IP-адрес - это меня удивило, так как мое понимание IP оказалось неверным. До этого момента я думал, что все устройства имеют уникальный IP-адрес.
Я хочу, чтобы разные устройства ассоциировались с разными клиентами, даже если два устройства находятся в одной и той же сети Wi-Fi. Я предполагаю, что данных, которые я использую для устранения неоднозначности устройств, одного IP-адреса их запроса (req.headers['x-forwarded-for'] || req.connection.remoteAddress
) недостаточно.
Как различить несколько устройств, подключенных к одному и тому же маршрутизатору? Есть ли в объекте req
дополнительный бит данных, который допускает это?
Или это просто неверная конфигурация сети, когда у моего ноутбука и смартфона один и тот же IP-адрес?
Спасибо!