Size: a a a

Clojure — русскоговорящее сообщество

2019 July 01

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
джетпаки изобретаете
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Alex Bubnov
вот свежий пример получше. есть у меня некий допотопный сервис, в котором авторизация на сессиях поверх кук. у сессии задан некий idle time, после которого она протухает - именно idle, считается от последнего запроса. сессии, внезапно, дорогие и их хочется реиспользовать.

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

как я делаю это в эрланге - беру generic регистратор с find-or-start, под него запихиваю воркеры, которые при инициализации получают вот эту сессионную куку и хранят её в себе. каждый внешний запрос с токеном приходит в регистратор, находит процесс сессии, идет в него и с кукой из него отправляется на какой-то там другой воркер, где уже будет сделан запрос к старому сервису. в процессе сессии по итогам пришедшего запроса реинициализируется таймер, по истечению которого процесс просто сдохнет и всё, на следующий запрос с соответственным токеном кука будте получена еще раз.
получается, инициализация ресурса - атомарная и происходит один раз, доступ к ресурсу сериализован, код, реализующий лайфтайм ресурса, локализован и очень простой.

вопрос - как это же идиоматично писать на кложе.
то есть держать целый «процесс» ради хранения посчитанного значения — звучит как перебор
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
При запросе на прокси если не истекла кука — дёргаем внутренний, ставим таймер на обновление куки (если надо). Если истекла — получаем новую и ставим таймер.
Если пришёл запрос на существующую сессию — дёргаем внутренний, ресет таймера.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
таймер — это что?
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Да что хочется
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
at-at можно взять
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
core.async
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
future в конце концов
источник

A

Artem in Clojure — русскоговорящее сообщество
Oleg Roshchupkin
future в конце концов
я бы с нее начал)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
если пришло два одновременных запроса на истекшую сессию, как избегаем двойной инициализации?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
на самом деле там до фига подводных камней, если писать навскидку «по простому»
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
то есть вот это (инициализация ресурса - атомарная) писать самому — нетривиально.
говорю по собственному опыту
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Ну, да, но можно засунуть в тот же core.async и обрабатывать в нём в порядке поступления.
источник

AB

Alex Bubnov in Clojure — русскоговорящее сообщество
Sergey Trofimov
то есть держать целый «процесс» ради хранения посчитанного значения — звучит как перебор
Так это пример простой, так-то вместо простой раздачи куки там может быть всякая нетривиальная логика - например, в erlyvideo так запускаются и живут процессы файлов и стримов, под которыми свои пулы воркеров и прочие подпроцессы, стейт в них всякий замороченный и всё такое.
источник

AB

Alex Bubnov in Clojure — русскоговорящее сообщество
Sergey Trofimov
то есть держать целый «процесс» ради хранения посчитанного значения — звучит как перебор
Ну и процессы те почти бесплатные
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Alex Bubnov
Ну и процессы те почти бесплатные
Ну мы-то не в ерланге, здесь платные :-)
источник

AB

Alex Bubnov in Clojure — русскоговорящее сообщество
Sergey Trofimov
Ну мы-то не в ерланге, здесь платные :-)
Так я и ищу замены. Мемоизация - ок, я о ней совсем забыл. Core.cache тоже ок, посмотрю внимательнее.
источник
2019 July 02

EG

Emmanuel Goldstein in Clojure — русскоговорящее сообщество
.
источник

EG

Emmanuel Goldstein in Clojure — русскоговорящее сообщество
(если где-то есть Clojure beginners, перенаправьте меня туда, пожалуйста)
Сорри за нубские вопросы, но я отчаялся самостоятельно понять, что я делаю не так: https://pastebin.com/yBXMjGjy
Функция censor-word работает нормально, но при этом в «главном цикле» play-with-word буквы не цензурируются, игра не завершается. При этом (:known-letters play) обновляется нормально.
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
Emmanuel Goldstein
(если где-то есть Clojure beginners, перенаправьте меня туда, пожалуйста)
Сорри за нубские вопросы, но я отчаялся самостоятельно понять, что я делаю не так: https://pastebin.com/yBXMjGjy
Функция censor-word работает нормально, но при этом в «главном цикле» play-with-word буквы не цензурируются, игра не завершается. При этом (:known-letters play) обновляется нормально.
То, что символ (кои получаются seq'ом строки) и односимвольная строка (которую выдаёт input) разные вещи. Цензурируются символы, а во множество попадают строки.
источник