2011-05-11 3 views
3

Простой сценарий. Пользователь регистрируется через форму, испеченную некоторой структурой высокого уровня (скажем, рельсы) и начинает общаться в чате. Чат является erlang-письменным и могут участвовать только прошедшие аутентификацию пользователи. Это означает, что каждый запрос (содержащий некоторый идентификатор сеанса), отправляемый с клиентской стороны, должен быть проверен (аутентифицирован) внутри кода erlang каким-то образом. Очевидно, что erlang ничего не знает о зарегистрированных пользователях и требует просить рамки для этой информации.erlang и внешняя аутентификация

Вопрос в том, как создать связь между erlang и каркасом, чтобы не вызвать дополнительные узкие места?

Я думал о хранении идентификаторов сеансов и в erlang. но дополнительные усилия, связанные с синхронизацией (при входе новых пользователей) и тайм-аутами сеанса, вызывают головную боль.

ответ

1

В этом случае нет ничего общего с бесплатным обедом. Если вы сохраните полномочия аутентификации за пределами erlang, вам придется иметь дело со всей этой головной болью. Вы можете обеспечить некоторое кэширование внутри erlang для повышения скорости, но это будет узким местом, а также вам придется решать все проблемы согласованности кеша. Лучшим решением IMHO является авторизация аутентификации erlang и обеспечение аутентификации для платформы высокого уровня.

+0

Я понял, что единственная проблема с сохранением такого кеша - это время ожидания сеансов. такие действия, как добавление новой записи в кэш (когда пользователь входит в систему), удаление существующей записи (когда пользователь выходит из системы) тривиально, но обнаружение, когда сеанс пользователя истекает и очистка кеша, кажется, является реальной проблемой. – Michal

1

Если мы говорим о Rails, я считаю, что можно подключиться к одной базе данных из Erlang и получить данные сеанса из таблицы сеансов (при условии, что вы используете db в качестве хранилища сеансов). Вы даже можете передавать данные в Rails таким образом.

+0

, что было бы хорошим решением (особенно при использовании couch db), но это также означает запрашивать базу данных каждый раз, когда приходит запрос. Это узкое место, которое я хочу избежать. – Michal

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