Добавление состояния в памяти в веб-API с помощью genservers - PullRequest
0 голосов
/ 03 марта 2019

В настоящее время я пытаюсь создать небольшой веб-API в Elixir, который нуждается в некотором состоянии в памяти.Короче говоря, когда пользователь впервые использует API, он запускает определенный бизнес-процесс, который он позже может продолжить с дальнейшими вызовами API.

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

При попытке поиска, как stringify PID, чтобы возвращать его при каждом обнаружении вызова API, thisнить , в которой говорится:

PID не гарантированно будут уникальными, поскольку они перерабатываются.

Поэтому мой вопрос: какой подход был бы наилучшим дляэтот сценарий?Как это обычно решается?

1 Ответ

0 голосов
/ 03 марта 2019

: erlang.make_ref () можно использовать для создания уникального идентификатора:

iex(1)> :erlang.make_ref()
#Reference<0.3918424786.2664955905.32640>

iex(2)> 

(есть причина, по которой вы не хотите использовать System.unique_integer / 1 ?)

В документации Elixir упоминаются типы данных Reference, Pid, Port, но я не могу найти какую-либо информацию о Reference введите Elixir, например, есть ли в Elixir встроенная функция, которая создает ссылки.

Ответ на комментарий :

Вот как можно преобразовать ссылку на строку *в эликсире:

iex(4)> make_ref() |> inspect()  
"#Reference<0.784388646.1821114370.207624>"

* Благодарность Хаулет в комментариях за поиск Kernel.make_ref().

это сработает?

В соответствии с Документами ядра :

Возвращенная ссылка вновь появится после приблизительно 2 ^ 82 вызовов;поэтому он достаточно уникален для практических целей.

...