У нас есть приложение NodeJS, работающее с SocketIO и кластеризованное на heroku.Чтобы заставить SocketIO работать, мы используем redis-адаптер, как обсуждалось здесь: https://socket.io/docs/using-multiple-nodes/.
Затем мы реализовали липкие сессии, как показано в документации по липким сессиям здесь: https://github.com/elad/node-cluster-socket.io.
Оказывается, что когда мы развертываем в Heroku, адрес connection.remoteAddress в:
// Create the outside facing server listening on our port.
var server = net.createServer({ pauseOnConnect: true }, function(connection) {
// We received a connection and need to pass it to the appropriate
// worker. Get the worker for this connection's source IP and pass
// it the connection.
var index = worker_index(connection.remoteAddress, num_processes);
var worker = workers[index];
worker.send('sticky-session:connection', connection);
}).listen(port);
на самом деле является IP-адресом некоторого сервера маршрутизации heroku, а НЕ клиентским IP.Я видел, что заголовок запроса «x-forwarded-for» может быть использован для получения IP-адреса клиента, но когда мы таким образом приостанавливаем соединение, у нас даже нет заголовков?