Липкая сессия на Heroku - PullRequest
       82

Липкая сессия на Heroku

0 голосов
/ 27 декабря 2018

У нас есть приложение 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-адреса клиента, но когда мы таким образом приостанавливаем соединение, у нас даже нет заголовков?

1 Ответ

0 голосов
/ 27 декабря 2018

Мы все искали решение, но, видимо, хороших решений нет.

Вот некоторые из лучших предложений:

https://github.com/indutny/sticky-session/issues/6

https://github.com/indutny/sticky-session/pull/45

Ни одно из них не показалось хорошим показателем производительности, и поэтому мы в итоге оказалисьизменение связи SocketIO только с Websockets.Это устраняет необходимость в липких сессиях все вместе.

...