2016-11-08 3 views
3

У меня есть приложение LoopbackJS, развернутое на IBM Bluemix и масштабируемое по горизонтали в трех экземплярах. Это приложение также использует Socket.io для реализации системы чата.Как включить липкие сессии в приложении LoopbackJS, работающем на CloudFoundry/Bluemix

Я бы хотел активировать липкие сеансы, чтобы каждый запрос, исходящий от одного и того же клиента, направлялся в один и тот же экземпляр приложения.

Я знаю, что следует избегать липких сеансов согласно 12 factors. Но это единственное решение для корректной работы socket.io с несколькими узлами.

Как указано here, похоже, мне нужно установить сеансовый файл JSESSIONID в приложении loopback.

Затем я сделал следующее в server.js из приложения LoopbackJS:

var session = require('express-session'); 
app.use(session({ 
    secret: 's3Cur3', 
    name: 'JSESSIONID', 
    proxy: true, 
    resave: true, 
    saveUninitialized: true 
})); 

После того, что изменения, когда я выполняю запрос к приложению Loopback, я могу видеть, что два печенья установлены в заголовки ответа:

Set-Cookie:__VCAP_ID__=988ce9aa9b7f49cdb31d04f697d892b6024579565ea443589ed10e7a4c1c05f0; Path=/; HttpOnly, JSESSIONID=s%3Adb3KsqgZfkwEg39wrLKcsB3AWpazcOgd.TcA1vYbVB5DqemJXDS%2BLxUJ207WNC7UGmS5BpjZQ9Xc; Path=/; HttpOnly; Secure 
Set-Cookie:JSESSIONID=s%3Adb3KsqgZfkwEg39wrLKcsB3AWpazcOgd.TcA1vYbVB5DqemJXDS%2BLxUJ207WNC7UGmS5BpjZQ9Xc; Path=/; HttpOnly 

во всяком случае, когда я выполняю запрос снова из того же браузера, я могу увидеть в журналах на стороне Bluemix, что запрос обслуживается другим экземпляром приложения.

Я действительно неопытен в этих предметах, поэтому был бы очень признателен за любые советы, которые помогут правильно настроить липкие сеансы.

+0

Оформление заказа https://github.com/rajaraodv/redispubsub – opiethehokie

ответ

0

Per https://docs.cloudfoundry.org/concepts/http-routing.html#sessions

«О последующих запросах, клиент должен предоставить как печенье JSessionID и VCAP_ID. Уровень маршрутизации CF использует VCAP_ID для передачи клиентских запросов к одному экземпляру приложения каждый раз.»

например. выберите VCAP_ID и поставьте вместе с JSESSIONID

+0

Проблема заключается в том, что cookie VCAP_ID не сохраняется браузером при возврате в заголовках ответов вместе с файлом cookie JSESSIONID , Файл cookie JSESSIONID сохраняется, но не VCAP_ID. Поэтому в заголовках второго запроса отправляется только файл cookie JSESSIONID. Любая идея, почему cookie VCAP_ID не сохраняется? –

 Смежные вопросы

  • Нет связанных вопросов^_^