我目前正在尝试在Elixir中构建一个小型Web API,该API需要一些内存状态。简而言之,用户首次使用API时,便会启动某个业务流程,随后可以继续进行进一步的API调用。
为此,我已经看到最好的方法是创建GenServer,在其中存储状态,然后通过PID对其进行进一步的API调用。
在尝试搜索如何stringify
以便在每个API调用中返回PID时,我发现this thread表示:
在回收PID时,不能保证它们是唯一的。
所以我的问题是:在这种情况下最好的方法是什么?通常如何解决?
答案 0 :(得分:2)
:erlang.make_ref()可用于创建唯一标识符:
iex(1)> :erlang.make_ref()
#Reference<0.3918424786.2664955905.32640>
iex(2)>
(是否有不想使用System.unique_integer/1的原因?)
Elixir文档mention,Reference
,Pid
,Port
数据类型,但我在Elixir中找不到有关Reference
类型的任何信息,例如Elixir是否具有创建引用的本机功能。
回复评论:
这是在Elixir中将引用转换为字符串*的方法:
iex(4)> make_ref() |> inspect()
"#Reference<0.784388646.1821114370.207624>"
*在评论中归功于Hauleth,以查找Kernel.make_ref()
。
那行得通吗?
根据Kernel docs:
返回的引用将在大约2 ^ 82次调用后再次出现; 因此,它对于实际用途来说足够独特。